よくあるミス
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/25 14:22 UTC 版)
最もよく見られるミスの一つは、cron ジョブのテストの際に見られる。テストの際には、少なくとも2分以上先の時刻を実行時刻として指定する必要がある。これはcrontabファイルの再読み込みは、編集後の次の分時にのみ行われるためである。例えば、現在時刻が12:05である場合、crontabファイルの再読み込みが12:06:01に行われるため、次のジョブをスケジュールするには少なくとも12:07以降を指定する必要がある。これに対処してテストをすぐに行うには、cronサービス自体を再起動する方法もある。 crontabからX Window Systemアプリケーションを起動するというミスも多く見受けられる。この問題は、cronからはX環境が実行可能かどうかが不明であり、crontabは主としてコンソールのみを対象としたプログラムの実行を意図しているためもあり、Xの情報を受け渡すことができない点にある。これに対応するには2つの方法がある。crontabの冒頭にDISPLAY=:0.0というような環境変数設定を行うか、アプリケーション実行引数に--display :0.0オプションを付けるかである。:0.0 は一例であり、どのディスプレイに出力すべきかは、echo $DISPLAY といったコマンドを実行して確認しておく必要がある。 よくあるミスのひとつは、コマンド指定においてエスケープせずに「%」記号を使うことで、これはエスケープする必要がある。 # ミス:1 2 3 4 5 touch ~/error_`date "+%Y%m%d"`.txt この場合、デーモンからは右のようなエラーメッセージがメール送信される:「/bin/sh: unexpected EOF while looking for `」 以下のように修正すると良い # エスケープしたもの:1 2 3 4 5 touch ~/right_$(date +\%Y\%m\%d).txt 以下も別のよくあるミスのひとつである: # 夏時間移行時に備える59 1 1-7 4 0 /root/shift_my_times.sh 一見すると、上記は4月第一日曜日の午前1時59分にコマンドshift_my_times.shを実行するように見えるが、そうではなく、4月1日から4月7日までの毎日、および、4月中の日曜日全てで実行されてしまう。 これを書き直すとすれば、以下のようにするのが一つの方法である。 # 夏時間移行に備える59 1 1-7 4 * test `date +\%w` = 0 && /root/shift_my_times.sh また、別のミスの例としては、2時間毎にジョブを実行しようとして、以下のように書くと、 # ログファイルに日付を追加* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log これは、各偶数時に毎分実行されてしまう。 この意図を表現するには以下のようにする: # 毎2時間おきに date コマンドを実行0 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log # もっと簡潔に書くと:0 */2 * * * date >> /var/log/date.log
※この「よくあるミス」の解説は、「crontab」の解説の一部です。
「よくあるミス」を含む「crontab」の記事については、「crontab」の概要を参照ください。
- よくあるミスのページへのリンク