読者です 読者をやめる 読者になる 読者になる

cronの使いどころと注意点について

指定日時にジョブの自動実行を行うジョブスケジューラことcron
バッチ処理などの定期実行で主に用いているがベストプラクティスがわからずおそるおそる使っていたためまとめる。

使いどころ
・アプリケーションのジョブの実行
・システムに関わるジョブの実行
・監視用途

crontabの設定

cronの設定にはcrontab形式と呼ばれるテキストファイルが用いられ、その編集にcrontabコマンドを使います。
crontabはユーザごとに設定されcrontabコマンドで編集したcronコマンドは/var/spool/cron/[user name]に保存されます。

一般的な設定方法

crontab -eを討つと編集画面が立ち上がりますがcrontab -rをミスタイプしてしまうと全消去してしまう恐れがあります。
そのため、crontab とファイル指定を行うことができるのでその方法で編集するのが望ましいでしょう。
なお実行結果は/var/log/cronに記録されていきます。

crontabの注意点

実行ディレクトリの問題

各cronのジョブが実行される際のカレントディレクトリは、ユーザのホームディレクトリになります。
そのため、実行コマンドの指定は絶対パスを使ったり、事前に実行ディレクトリにcdする必要があります。

環境変数

cronの各ジョブ実行時には、環境変数は最低限しかセットされていません。
特に$PATHに/usr/bin:/binしか指定されていないため、セットしたはずのコマンドにパスが通っておらず、コマンドが実行できないというミスがありがちです。

毎分指定

毎朝5時ちょうどにバックアップをしたい場合を例にあげると
うっかりこういった設定ミスをしてしまう。(過去に自分もした)

意図した正しい設定

  0 5 - * * /path/to/backup.sh

間違えた設定

 * 5 * * * //path/to/backup.sh
%のエスケープ

crontabの指定において%は改行を意味するメタ文字です。
もし%を記述したい場合はエスケープ文字を入れる必要があります
例:%→\%

0分ちょうど指定を避ける

1時間毎に行う定期処理については毎時0分に設定してしまいたくなるが
ちょうどの時間は他のジョブが設定されがちなので0分になると急にサーバの負荷が上がる危険性があるため避けるべきです。
特にクローラを動かしたり、外部APIへの問い合わせを行うような処理を行う場合は
先方の負荷を考え0分指定にしないようにしたほうがいいようです。

参考文献
新しいLinuxの教科書