目次 >> cron
Linuxやcygwinなどで、定期的に何かコマンドやスクリプトを実行したい場合は、cronを使うのが便利である。Windowsにおけるタスクスケジューラである。
ここでは、cronの設定の仕方について解説する。
定期的に行うもの、たとえばバックアップや時計合わせなどはcronを利用して自動実行するようにする。
/etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly
の各ディレクトリ内に毎日、毎時間、毎月、毎週行うスクリプトを入れておく。
それぞれ実行される時刻はFedoraやubuntuの場合、/etc/crontab内の
01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
の各行に書かれている。
/etc/cron.d
には、crontabで指定するように細かく指定したものを入れておくことができる。
/etc/cron.d/内のファイルはパーミッションは原則644とする。
各スクリプトには、シェルとして/bin/shを指定する必要がある。/etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly内のファイルは、実行時間を指定せずに、
#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf
の様に、/etc/cron.d内のファイルは実行時間を指定して、
#!/bin/sh */3 * * * * root /usr/local/sbin/temp.sh
の様に記述する。2番目に書いた時間を指定して実行するものに関しては/etc/crontabというファイル内に書いてもおなじことである。
実際の時間の指定方法であるが、
分 時 日 月 曜日
の5つのフィールドを記入する。例えば毎日1時という指定は、
0 1 * * *
となる。*はDOSなどでのワイルドカードと同様、最初から最後まですべてを意味する。よってこれを
* 1 * * *
とすると1時台の毎分実行されてしまうことになる。
ハイフン(-)を使うと、範囲を指定することができる。例えば、毎月5日から10日までの毎日1時0分という指定は
0 1 5-10 * *
となる。
曜日は0が日曜日、1が月曜日という風に対応している。なお7も日曜日として扱える。例えば、平日月曜日から金曜日までの毎日1時という指定は
0 1 * * 2-6
となる。
~毎という指定にはスラッシュ(/)を使う。
cronで実行される実行ファイルは、必ずフルパスで書く必要がある。
# /etc/init.d/crond status
と打ちます。
OpenSUSEの場合は
Checking for Cron: running
Checking for Cron: unused
のように、Fedoraの場合は、
crond (pid 1983) is running...
crond is stopped
の用に表示される。
/etc以下のファイルはroot以外は書き換えることができないが以下のようにしてユーザーは自分のcrontabを書き換えることができる。
$ crontab -e
cronは実行されるとその結果をメールで送る機能がある。
これは、crontab内のMAILTOで指定する。
MAILTO="hoge@example.com"
とすると、hoge@example.comに実行結果が送られる。
MAILTO行自体がない場合は、crontabファイルの所有者にメールが送られる。
メールを送ること自体を停止したい場合は、
MAILTO=""
の様に、空欄を指定する。
cronの実行結果は、
/var/log/cron(Fedoraなど)
/var/log/syslog(Ubuntu)
あたりにある。
まず、cygwinのセットアッププログラムであるsetup.exeを実行して、cronとcygrunsrvをインストールする。
次に、cygrunsrvでcronをWindowsのサービスとして登録する。
$ cygrunsrv --install cron --path /usr/sbin/cron --args -D
-Dオプションはcronをcygrunsrv下で動かすためのオプションである。
その後、
$ cygrunsrv --start cron
でサービスを起動します。これで、Windows起動時に自動的にcronがサービスとして起動する。
あとはLinuxなどと同様にcrontab -eでスケジュールを設定します。
Windowsの場合タスクスケジューラを使うのが簡単であるが、Windows用プログラムも、/cygdriveディレクトリからたどる形でCygwinのcronを使って起動することができる。例えば、
/cygdrive/c/Win32app/hoge/hoge.exe
とすると、Cドライブの\Win32app\hogeフォルダにある、hoge.exeが起動される。
起動するファイルにオプションなどをつけて起動したい場合は、そのようなバッチファイルを作成して、そのバッチファイルをcygwinから起動するようにするとよい。
cronが起動しているかどうかを確認するには
$ ps -ef | grep cron
とする。
なお、設定を書き換えた場合は、cronサービスの再起動をしないと有効にならないので注意。
最終更新日