Ausführungsreihenfolge bei mehreren Befehlen

Ausführungsreihenfolge bei mehreren Befehlen

Ich bin relativ neu bei Linux und arbeite an einem CronTab für geplante Backups. Ich habe herausgefunden, wie man mit ;und mehrere aufeinanderfolgende Jobs ausführt &&, bin mir aber nicht sicher, wie sich die Abhängigkeit auf die Reihenfolge auswirkt.

Mein Cronjob sieht folgendermaßen aus:

# 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        

Ich möchte shutdown.sh ausführen und die Sequenz fortsetzen, wenn sie erfolgreich ist, sie aber abbrechen, wenn sie fehlschlägt. Ich befürchte, dass sh backup.shdie Sequenz nur übersprungen wird, aber dann fortgesetzt wird.

Wird es wie vorgesehen funktionieren? Wenn nicht, wäre so etwas shutdown && (backup ; nas ; ftp ; startup)möglich?

Antwort1

Warum testen Sie es nicht mit einigen Dummy-Befehlen, von denen Sie wissen, ob sie funktionieren oder fehlschlagen?

$ 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

Es scheint also, als wäre Ihre Intuition richtig gewesen und Sie benötigen die zweite Struktur.


AlsempfohlenvonAbonnieren, für allgemeine Tests können Sie true(oder :) und falseanstelle lseiner nicht vorhandenen Datei verwenden. Daher

$ false && echo ok1 ; echo ok2
ok2

$ false && (echo ok1 ; echo ok2)

Antwort2

wenn shutdown.sh Ihren Server wirklich neu startet, glaube ich nicht, dass die anderen Befehle ausgeführt werden?? Die Antwort wurde möglicherweise gelöscht, Sie können sie aber lesen, daher hier nur einige Hinweise: Legen Sie die Skripte in einen eigenen Ordner und rufen Sie sie mit vollständigem Pfad auf, Cron wird möglicherweise in einem anderen Ordner ausgeführt. Es ist auch gut, sie ausführbar zu machen und sie direkt ohne sh aufzurufen. Die gesamte Logik in ein zusätzliches Skript mit einem if-else zu packen, ist auch gute Codierung. Wenn Sie befürchten, dass sh als Shell verwendet wird, verwenden Sie ein Shebang.

verwandte Informationen