« cronが5つまでしか設定できない! | メイン | さくらインターネットの価格と容量 »

June 26, 2005

シェルスクリプトを使ってcronを一括実行

第7回

前回、cronが5つまでしか設定できないので
cronの命令をずらずら後ろに並べてまとめることで複数のcronを1回に実行できるという話をしました。
ただ、この方法だと、1行に書くのでとても見にくいです。
そこでシェルスクリプトを使ってcronをまとめて実行する方法を掲載いたします。

シェルスクリプトとは、複数の処理をまとめて行なう(バッチ処理)ときに使われるのですが
起動するコマンドを集めてテキストファイルに保存し
そのファイルに実行権を与えることによって、順次指定したコマンドを起動することができます。

さくらインターネットは、シェルスクリプトもサポートしています。

では、シェルスクリプトはどういうふうにしたらよいのでしょう。

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
cd /home/midilin/www/MT/
./tools/run-periodic-tasks

というテキストファイルを作ります。
これで1行目はシェルスクリプトを使うための宣言(お約束とでも思ってください)
次の2行目のPATH、これも同じお約束で、さくらインターネットでシェルスクリプトを実行する為に
読み込む関数みたいなものです。
3行目、4行目は
MovableTypeでcronを実行するときに指定したもの
「cd /home/midilin/www/MT/; ./tools/run-periodic-tasks」
を2行に分けて書きました。

上記のファイルを、テキストファイルとして保存します。
ファイル名は何でもよいですが、cronというフォルダを作成して、cron1.shに保存したとします。

で、cronの設定では
「cd /home/midilin/www/MT/; ./tools/run-periodic-tasks」
と今まで指定していたところを
このテキストファイルを指定してあげます。

/home/midilin/www/cron/cron.sh

こうすると、cronフォルダにあるcron.shを実行してくれるので
同じMovableTypeを自動実行してくれます。


これを応用して、MovableTypeのcronの設定と他のcronの設定をまとめて書いてしまえばよいわけです。

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
cronA
cronB
cronC
cronD
cronE
cronF
cd /home/midilin/www/MT/
./tools/run-periodic-tasks


これをcron.shというファイルで保存して、
1つのcronを実行させてあげれば、一気に実行させることができます。

ただし、あまり負荷のかかるプログラムの実行をcronで行うのは辞めましょう。
cronは他の方も使われている共通のところで行われるため、あまり負荷がかかるものを使用すると
強制削除される可能性もあります。
常識の範囲で使われることをお勧めします。

また、cronの設定は1時間に2個以上の場合強制削除される可能性もあると
さくらインターネットに記述してあるので、1時間に一回あたりの設定がよいと思います。

投稿者 midilin : June 26, 2005 12:10 AM

コメント

はじめまして。
cron初心者です。
いつも参考にさせていただいております。

質問なのですが、以下の2つのスクリプト、

/home/hoge/xxx/www/aaa.pl
/home/hoge/xxx/www/bbb.pl

を、cronで同時に実行する場合、cron.shはどのように記述すれば良いのでしょうか?

ご教示いただければ幸いです。

投稿者 Nori : June 26, 2005 10:26 PM

Noriさん、初めまして。
管理人の安田まことと申します。

質問の件ですが、そのままプログラムの実行文を
テキストファイルとして書いてあげればよいです。

----------------------------
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

/home/hoge/xxx/www/aaa.pl
/home/hoge/xxx/www/bbb.pl
----------------------------

これをcron.shとして保存してあげて
実行してあげればOKです。

投稿者 安田まこと : June 27, 2005 10:13 AM

ありがとうございました。
動作しました!

ただ、cron.shに記述したプログラムのうちの一つが、telnetで実行するときちんと動作するのですが、cronで実行すると動きません。

もう少し試行錯誤してみようと思います。

投稿者 Nori : June 27, 2005 12:19 PM

はじめまして。
さくらでDBの自動バックアップを行いたいと思い、調べていたところこちらにたどり着きました。

いまいち、corontabについて分かっておらず、crontab -e のエディタ起動方法がわからないのですが、もし分かれば教えていただく事が出来ないでしょうか。

よろしくおねがいします。

投稿者 yoshi : November 1, 2005 01:28 PM

yoshiさん、初めまして。
安田まことと申します。

エディタとcrontabのご質問ですね。

まず、さくらインターネットにtelnetで接続します。
telnetの接続方法は、さくらインターネットのページにありますので
そちらを参考にしていただけるとわかると思いますが
簡単に説明すると

Windowsの「スタートボタン」→telnet サーバー名
でtelnetが起動します。

そのあと、サーバーに接続するIDとパスワードを使うと
telnetでさくらのサーバーに接続できます。

次にtelnet上で
「crontab -e」
とうちこむと、「vi」というエディタが起動し、
crontabが編集できるようになります。

viは、結構クセがあるエディタなので
「vi 使い方」などで検索すると、viの使い方があると思います。

投稿者 安田まこと : November 1, 2005 02:34 PM

安田さん

ご丁寧なアドバイス大変ありがとうございます。
まさかお返事頂けるとは思っていなかったので、とても嬉しいです。

おかげさまで、crontabの編集が出来ました。viについても、何も知らずに触っていれば、通常のコマンドプロンプトと混同してしまい全く理解不能だったと思いますが、教えていただいたおかげで使い方も理解出来ました。

ありがとうございます。

肝心のバックアップですが、以下を参考に試みたのですがどうも思うようにいかず、引き続き頑張ってみようと思っています。
ttp://tam.qmix.org/archives/2005/04/_mysql.html

どうもありがとうございました。

投稿者 yoshi : November 2, 2005 07:20 PM

コメントしてください




保存しますか?