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

2025-03-27
1分で読了
更新: 2025-12-27
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

この記事をシェア

この記事を書いた人

Roy Okuwaki

「かたつむりくんのWWW」を運営している Roy Okuwaki(tinybeans)です。bit part 合同会社 代表社員。2007年から、Movable Type や Craft CMS などの CMS、Web 開発、AI ツールの使い方について書いています。

プロフィールを見る →

関連記事