cronでの「&&」と「;」の違いとは?コマンド実行の落とし穴に注意

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
Published 2025-03-27
Updated 2025-03-27

⚡️ 話題の一冊 ⚡️