スポンサーリンク
テクノロジー

cronで定期実行する基本|crontabの5つの欄の読み方、動かないときの原因と確かめ方

スクリプトにまとめて登録する手順

crontab には一行で何でも書けますが、処理が少しでも長くなるなら、スクリプトファイルにまとめて、crontab からはそれを呼び出すだけにするのがおすすめです。ここでは、毎日のバックアップを例に手順を紹介します。

スポンサーリンク
外付けドライブをつないだパソコンを操作する手元
バックアップの処理を登録前に確かめる
  1. スクリプトを置く場所を決める。たとえばホームディレクトリの下に bin フォルダを作る。
  2. スクリプトファイルを作る。先頭行に #!/bin/bash のように使うシェルを書き、ファイルは絶対パスで指定する。
  3. chmod +x で実行権限を付ける。
  4. ターミナルから絶対パスでスクリプトを実行し、手で動くことを確かめる。
  5. cron に近い環境で試す。env -i /bin/sh -c '/home/user/bin/backup.sh' のように環境変数を空にして実行すると、PATH に頼った書き方が残っていないかを確かめられる。
  6. crontab -e で、数分後の時刻を指定した行を一時的に登録し、実際に動くかを確認する。
  7. 動作を確認できたら、本来の時刻に書き換える。
登録前の確認(コマンドとファイルを絶対パスで書いたか、実行権限を付けたか、crontabの % を \% にしたか、出力をログに残す書き方にしたか、数分後の時刻で試し実行したか)
手で動いても、この5つを見直す。

バックアップの考え方も合わせて

定期実行の用途として最も多いのがバックアップです。cron で自動化するときは、「何を」「どこへ」「何世代」残すかを先に決めておくと、スクリプトがシンプルになります。バックアップと同期の違いや世代管理の考え方は、バックアップと同期の違いとは?大切なデータを守る保存と復元の基本で紹介しています。

ログの残し方とメール通知

cron のジョブは画面のない場所で動くので、何が起きたかを後から確かめられるようにしておくことが大切です。

出力をファイルに残す

cron のジョブが標準出力やエラー出力に何かを書き出すと、多くの環境ではその内容が利用者宛てのメールとして送られます。メールを読む仕組みがない環境では、出力は気づかれないまま消えてしまいます。

出力をログファイルに残すには、コマンドのあとにリダイレクトを書きます。

30 3 * * * /home/user/bin/backup.sh >> /home/user/log/backup.log 2>&1

>> はファイルの末尾に追記する指定、2>&1 はエラー出力も同じファイルに書く指定です。2>&1 を付け忘れると、肝心のエラーメッセージがログに残りません。スクリプトの中で date を出力しておくと、いつの実行の記録なのかが分かりやすくなります。

スポンサーリンク

MAILTO でメールの宛先を決める

crontab の先頭に MAILTO= の行を書くと、出力の送り先を指定できます。MAILTO="" と空にすると、メールを送らない設定になります。ただ、メールを止めるとエラーにも気づけなくなるので、ログファイルへの出力とセットで使います。

cron 自体のログを見る

ジョブが起動したかどうかは、cron のログで確かめられます。ログの場所はディストリビューションによって違い、Debian や Ubuntu 系ではシステムログ(/var/log/syslog など)に CRON という名前で記録され、journalctl -u cron で見られる環境もあります。Red Hat 系では /var/log/cron に記録されることが多いです。お使いの環境の資料で確かめてください。

次のページへ重複実行と時刻のずれに備える
スポンサーリンク
  1. 秋の戸口に並ぶかぼちゃの明かりとかぶ、麦束
  2. 資料を手に落ち着いて話し合う二人
  3. ノートパソコンと資料、外付け記憶装置がある机
  4. 冬の木で越冬する卵のうやミノムシ、テントウムシ
  5. 青い折り鶴と三角に折った紙、無地の折り紙