Cronと言えばLinuxでデファクトのジョブスケジューラ。バッチの起動やサービス化するほどでもないアプリケーションの定時起動など、便利ですね。
今回はcronを設定するcrontab
コマンドの使い方をメモしておきます。
crontabコマンド
英語版のWikipediaで見て知りましたがcrontab
ってcron tableの意味なんですね。
設定の確認
設定確認は下記の-l
オプションをつけて実行します。
1 2 | $ crontab -l 5 12 * * * /usr/share/scripts/run.sh |
cronはスケジュールをユーザに紐づけて設定するので、別のユーザで実行させたい、などの場合は明示的に指定する必要があります。
省略するとログイン中のユーザが暗黙的に使用されますが、-u
オプションでユーザを指定することができます。
1 2 3 4 5 | $ crontab -u {user} -l # rootを使う場合 $ crontab -u root -l $ sudo crontab -l |
設定の編集
設定を編集するには以下のオプションを使います。ユーザを指定するやり方は上記と同じです。
1 | $ crontab -e |
設定(後述)を書いたファイルを渡すこともできます。
1 2 | $ crontab < ./mycron.cfg $ crontab ./mycron.cfg |
-r
(設定削除)オプションと誤爆する可能性があるため前者の-e
を使わないようにしているひともいるようです。
設定の書き方
書式は先頭(左)から分・時・日・月・曜日、とコマンド、の順になっています。
色々書き方はできますが、よく使う下記のようなものを覚えておけばとりあえずは大丈夫。
コマンドを長々と書くよりはバッチファイル化してしまうことのほうが多いと思います。コマンドはシェルでは環境変数やエイリアスが効きますが、この設定ではフルパスを記載しておいたほうが無難。
あとよくやるのはログをファイルに書き出す、という設定。このあたりはシェルと同じ書き方です。各行毎の終端に改行を入れておいたほうが無難。
1 2 3 4 5 6 | # 5分ごとに実行、標準出力とエラー出力をファイルに保存 */5 * * * * /home/user/script.sh > /home/user/script.log 2>&1 # 毎日PM8:00に実行、標準出力をファイルに追記 0 20 * * * /home/user/script.sh >> /home/user/script.log # 毎月初日のAM9:00に実行 0 9 1 * * /home/user/script.sh > /home/user/script.log |
設定内に記載したコマンドの実行ユーザは、crontab
コマンドで指定したユーザになります。
ユーザ毎設定の保存先
-l
オプションで確認できますが、実体のファイルとしては下記のパスに格納されています。
gitなどでバージョン管理する際にはファイルを参照したほうがいいでしょう。
1 | $ ls -l /var/spool/cron/crontabs |
上記はユーザ毎の設定ファイルですが、システム共通で実行されるものは他の場所にあります。
管理者権限があればもちろん編集はできますが、システム専用のものになっているので触らないようにするのが原則です。