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

2025-03-27
1分で読了
更新: 2025-12-27
0585f7f7-b6ac-44b8-8cd5-e8ed8521fe00.webp

目次

それ、ほんとうに想定通り動いていますか?

たとえば、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

この記事をシェア

関連記事