複数のコマンドの実行順序

複数のコマンドの実行順序

;私は Linux を使い始めたばかりで、スケジュールされたバックアップ用の CronTab を作成中です。とを使用して複数のジョブを連続して実行する方法を見つけました&&が、依存関係がシーケンスにどのように影響するかはわかりません。

私の cron ジョブは次のようになります:

# Every day at 0:00 (reboot server and do the hourly backup procedure).
0 0 * * * sh shutdown.sh && sh backup.sh ; sh nas.sh ; sh ftp.sh ; sh startup.sh        

私が実現したいのは、shutdown.sh を実行し、成功した場合はシーケンスを続行し、失敗した場合はキャンセルすることです。私が心配しているのは、スキップしただけでsh backup.shシーケンスを続行してしまうことです。

意図したとおりに動作しますか? そうでない場合、次のようなことはshutdown && (backup ; nas ; ftp ; startup)可能でしょうか?

答え1

動作するか失敗するかが分かっているダミーコマンドでテストしてみてはいかがでしょうか?

$ ls foo && echo ok1 ; echo ok2
ls: cannot access foo: No such file or directory
ok2

$ ls foo && (echo ok1 ; echo ok2)
ls: cannot access foo: No such file or directory

したがって、あなたの直感は正しかったようで、2 番目の構造が必要です。


として提案されたによるマイクサーブ一般的なテストでは、存在しないファイルの代わりに、true(または:) とを使用できます。したがって、falsels

$ false && echo ok1 ; echo ok2
ok2

$ false && (echo ok1 ; echo ok2)

答え2

本当にshutdown.shがサーバーを再起動する場合、他のコマンドは実行されないと思います。回答は削除される可能性がありますが、読むことはできます。ここではヒントをいくつか示します。スクリプトを独自のフォルダーに配置し、フルパスで呼び出します。cronは別のフォルダーで実行される可能性があります。スクリプトを実行可能にし、shを使用せずに直接呼び出すのも良い方法です。ロジック全体をif-elseを使用して追加のスクリプトに配置するのも良いコーディングです。shがシェルとして使用されることを心配する場合は、shebangを使用します。

関連情報