Cron-Jobs mit der gleichen Ausführungszeit

8

Angenommen, ich habe mehrere Cron-Jobs eingerichtet, die gleichzeitig ausgeführt werden sollen: Werden sie parallel oder nur nacheinander ausgeführt?

(Mein Fall ist Debian Squeeze mit Cronjobs in /etc/cron.d/mycronjobs).

Gabriele
quelle

Antworten:

7

Der Vollständigkeit halber werden Jobs in z. B. /etc/cron.{hourly,daily,weekly,monthly} nacheinander ausgeführt. Das Run-Parts-Skript durchläuft alle Dateien in diesem Verzeichnis.

02 4 * * * root run-parts /etc/cron.daily

Sie können dies also in Kombination mit einer Namenskonvention (ähnlich der Nummerierung in /etc/init.d/rc*.d) verwenden, um sicherzustellen, dass Jobs nacheinander ausgeführt werden.

Bram
quelle
Was ist, wenn ich mehrere Cron-Jobs in derselben Datei habe, die gleichzeitig ausgeführt werden sollen?
Gabriele
Ich bin mir nicht sicher, was Sie unter "in derselben Datei" verstehen. Wenn Sie jedoch meinen, dass Sie mehrere Zeilen mit derselben Zeitangabe haben (wie die, die 0 * * * *Sie zuvor gepostet haben), gibt es keine Garantie für die Reihenfolge, in der sie ausgeführt werden. Sie können parallel auf einem Mehrkernsystem ausgeführt werden. AFAIK Die Reihenfolge, in der sie ausgeführt werden, kann sogar jeden Tag anders sein. Die von mir erwähnte Namenskonvention in Kombination mit Run-Parts oder die Verwendung eines Master-Skripts, das die eigentlichen Sicherungsskripte aufruft, ist die einzige Möglichkeit, um sicherzustellen, dass Skripte in einer bestimmten Reihenfolge ausgeführt werden.
Bram
Ok, da ich sicher sein muss, dass meine Skripte nacheinander ausgeführt werden, werde ich mich für ein "Master-Skript" entscheiden, das von einem Cron-Job ausgelöst wird, und alle Skripte aus dem Hauptskript heraus aufrufen.
Gabriele
5

Die in cron aufgelisteten Aufgaben werden parallel ausgeführt, wie dies normalerweise bei Prozessen der Fall ist. Es gibt keine Möglichkeit, sicher zu sein, welche zuerst gestartet wird, und keine Möglichkeit, sicherzustellen, dass Aufgabe A abgeschlossen ist, bevor Aufgabe B beginnt.

Sirch
quelle
1
Sie können sicherstellen, dass Aufgabe A abgeschlossen ist, bevor Aufgabe B beginnt, indem Sie sie in derselben Zeile auflisten und durch ein Semikolon trennen.
Nicholas
Das bedeutet nicht, dass Aufgabe A erfolgreich abgeschlossen wurde. Vielleicht könnten Sie ein && verwenden, aber so etwas sollte von einem Skript ausgeführt werden, das aufgerufen wird.
Sirch
Sie können beliebige Operanden verwenden, die von der Bash-Shell unterstützt werden. Verwenden von &&, || oder; In Cron ist nach meiner Erfahrung gängige Praxis.
Nicholas
2

Cron ist ein Daemon (Dienst), der kontinuierlich ausgeführt wird. Es werden jedoch einmal pro Minute Crontabs angezeigt.

Die genaue Reihenfolge, in der Jobs ausgeführt werden, hängt von der Implementierung des Systems ab.

Die losen Dateien, die einige Distributionen in /etc/cron.d/ ablegen, werden nach ihren Cron-Timer-Einstellungen durchsucht, da diese Dateien der normalen Crontab (5) -Syntax folgen.

In welcher Reihenfolge die einzelnen Jobs ausgeführt werden, hängt natürlich von dem Zeitplan ab, den Sie für sie festgelegt haben.

adaptr
quelle
Was ist, wenn der Zeitplan wie folgt festgelegt ist: ---- 0 * * * * root sh / var / opt / backup_scripts / backup1 - 0 * * * * root sh / var / opt / backup_scripts / backup2 ---- Werden sie nacheinander ausführen, dh backup1 und, wenn fertig, backup2?
Gabriele
Die genaue Reihenfolge, in der Jobs ausgeführt werden, hängt von der Implementierung des Systems ab. Mann Cron für Details.
Adaptr
Mann Cron sagt nichts darüber (zumindest in Debian).
Gabriele
2

Sie werden parallel ausgeführt. Sie können die folgenden Methoden verwenden, um die Prozesse nacheinander auszuführen.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
Nikolaus
quelle