cronで複数コマンドを繋ぐ際の「;」と「&&」の違いを解説。意図しないスクリプト実行を防ぐための書き方を紹介します。
たとえば、cron に以下のような設定をしたとします。
*/15 * * * * cd /path/to/script; sh script.sh
この場合、もし /path/to/script が存在しない、または何らかの理由でアクセスできないと、cd は失敗します。しかし sh scripts.sh はそのまま実行されてしまいます。つまり、今いるディレクトリで実行されてしまうのです。
これが「 ; 」で繋いだ場合の動作です。
このような事故を防ぐには、「&&」を使うのが安全です。
*/15 * * * * cd /path/to/script && sh scripts.sh
この書き方なら、cd に成功したときだけ scripts.sh が実行されます。つまり、意図しない場所でスクリプトを動かすリスクを防げるのです。
cd path; cmd 👉 前のコマンドが失敗しても後ろを実行するcd path && cmd 👉 前のコマンドが成功したときだけ後ろを実行するcron の設定は一度書いたら放置しがちですが、だからこそ細かい記述の違いが大きなトラブルにつながることもあります。
今一度、自分の crontab を見直してみましょう。
以下のようにすれば標準出力とエラー出力をログに残すこともできます。
*/15 * * * * cd /path/to/script && sh script.sh >> /path/to/log.txt 2>&1