Linuxコマンド「cron」


Linuxのcronは指定した日付にジョブの自動実行を行うスケジューラです。
cronはアプリケーションやシステムの定期的なジョブ実行、監視などの用途で使われます。

😎 crontabについて

cronの設定はcrontab(cron table)というテキストファイルに保存されます。
Red Hat系のLinuxでは、/var/spool/cron/[username]に保存されます。

crontabの基本的な書式は次のとおりです。

分 時 日 月 曜日 実行コマンド
要素 説明
分 時 日 月 ジョブを実行する日時をペース区切りで数値(記号)で指定
曜日 月曜日には0が日曜で6が土曜日の数字(記号)で指定

各フィールドには数値以外に次の記号を使うことができます。

記号 意味
- 範囲を指定。時間なら1-10なら1時から10時までの毎時間
* 全範囲を指定。時間なら0-23時までの毎時間
/ インターバルを指定。時間が*/4なら4時間おき
, 区切り指定。時間が1,4,7なら1時、4時、7時

🗻 crontabの設定例

ターミナルでcrontab -eを実行するとcrontabを編集できます。PATHは適切なパスを読み込むように設定しておきましょう。

MAIL_TO=hoge@example.com
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
30 20 1 5 * echo hoge

上記のように設定した場合、5月1日20時30分にコマンドecho hogeが実行されます。
コマンドの標準出力とエラー出力は、MAIL_TOで指定したアドレスに送られます。

🚌 crontabの設定手順

cronのプロセスの確認

# cronのプロセスが起動しているかの確認
/etc/rc.d/init.d/crond status
# 起動していない場合は起動
/etc/rc.d/init.d/crond start

cron設定ファイルの権限確認

# root は任意のユーザー名に変更
ls -la /var/spool/cron/root
# 権限は以下が正しい
chmod 600 file1

cronの実行ログの確認

vi /var/log/cron

cronの実行時にログを出力するようにする

標準出力を/tmp/cron-log.logに、標準エラーを/tmp/cron-err.logに出力するようにすることで実行結果を確認できます。

*/5 * * * * /bin/sh /home/user/hoge.sh >>/tmp/cron-log.log 2>>/tmp/cron-err.log

🎳 /etc/cron.d/の注意点

/etc/cron.d/にcronの設定を記述したファイルを置くと、cronタスクを定期実行してくれます。ファイル所有者をrootにする必要があるので注意してください。(任意のユーザーを許可すると勝手なコマンドが実行できてしまうため)

🤔 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍