cron(crontab)の簡単な使い方

あるプログラムで「loop do ???; sleep 1800 end」みたいなことを書いてて、「これっておかしくないか?」とハタと気がついたわけです。なにも無限ループを回さなくたって、cronに任せちゃえばいいじゃないか。

cronの設定確認

「crontab -l」で現在の設定が表示されます。なければ「no crontab for xam」と言われます。これ(↓)はあった場合の例です。

$ crontab -l

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/lib/gems/1.8/bin
RAILS_ENV=production

# m h  dom mon dow   command
 */30 * * * * ruby /home/www/2.5-55.jp/lib/backup.rb > /dev/null 2>&1

cronの設定方法

「crontab -e」とやるとエディタが立ち上がってきますので、ここで設定します。
「# m h dom mon dow command」が「分 時 日 月 曜日 コマンド」になります。

  • 先頭の # はコメントです。
  • * はなんでも可です。時間が * だと毎時になります。
  • 範囲指定は - です。時間で 9-17 とすると 9時から17時の間有効になります。
  • 飛び飛びの指定は , でできます。時間で 9,12,15,18 とすると 9時から18時まで3時間おきという指定になります。
  • 間隔が一定な場合は / が使えます。時間で 9-18/3 とすると、上と同じ3時間おきという指定になります。

上の例だと、毎日毎時30分おきに「ruby /home/www/2.5-55.jp/lib/backup.rb」というコマンドを起動することになります。

cronの設定方法の注意

コマンドには「> /dev/null 2>&1」を付けて、標準出力も標準エラー出力も /dev/null に捨てないとうまくいかないそうです。(事前にググっていて対処済みだったため、付けないとどうなるかは未確認ですが)

cronの動作確認

ちゃんと設定した通り、プロセスが起動しているかどうかは「/var/log/syslog」を見ればわかります。

$ tail /var/log/syslog

Jun 19 10:30:02 ubuntu710 /USR/SBIN/CRON[23750]: (xam) CMD (ruby /home/www/2.5-55.jp/lib/backup.rb > /dev/null 2>&1)

参考

  1. こちら(→cronの設定)がすごく参考になりました。
  2. こちら(→http://www.levistone.net/log/eid36.html)も参考にさせていただきました。