はじめに
cronはタイマーを設定して、決まった時間、決まった月日、決まった曜日などに、スクリプトが実行ができるデーモンです。定期的にログを取得するような場合によく使われます。デーモン名はcronですが、コマンドはcrontabになります。
環境
Ubuntu20.4
コマンド例
cronのデーモンが動作しているか確認をします。Ubuntuのデフォルトでは起動しています。
$service --status-all | grep cron
現状の設定を表示するコマンドです。
$crontab -l
設定した内容を削除するコマンドです。くれぐれも誤って実行してしまわないようにして下さい。
$crontab -r
設定内容を編集するコマンドです。エディタを終了した後、文法チェックが流れます。文法チェックで問題がなければ「installing new crontab」と表示されます。エディタでnanoが立ち上がる場合は、viに変更することができます。
$crontab -e
設定例
crontab -eを実行すると、上部に記述の仕方が英語で書かれています。サンプル通りに設定すると、毎日5時0分にコマンドが実行されるようになります。
設定個所のフォーマットは、「* * * * * コマンド」になっています。アスタリスク部分は、左から順番に「分、時、日、月、曜日」となります。
For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
毎月20日 23:59に実行させる例です。時刻は24時間表記です。12で設定すると昼の12時のことになります。
59 23 20 * * ./home/hoge.sh
毎週 金曜日(5) 17:00に実行させる例です。
00 17 * * 5 ./home/hoge.sh
5分間隔で実行させる例です。 /は何分間隔です。
*/5 * * * * ./home/hoge.sh
毎日 11:00に実行させる例です。
0 11 * * * ./home/hoge.sh
Rubyのスクリプトを実行したい場合、このように設定しても実行されません。
1 12 * * * ruby $HOME/hoge.rb
Rubyのスクリプトを実行する場合は、Rubyのフルパスを指定する必要があります。Rubyがあるパスはwhichで探すことができます。
1 11 * * * ruby /usr/local/rbenv/shims/ruby $HOME/hoge.rb
ログについて
cronを実行すると、cron.logが増大していくことになります。このように設定すると、毎月1日にログがクリアされるようになります。
* * 1 * * sudo cp /dev/null /var/log/cron.log
月~金 12時1分に、Rubyのスクリプトを実行させる例です。エラーになった場合は、ログを出力しています。
1 12 * * 1-5 cd $HOME && /usr/local/rbenv/shims/ruby hoge.rb >> ./log_hoge.log