
Angenommen, ich erstelle zwei Crontab-Dateien.
/tmp/my-crontab
/root/my-alternate-crontab
Für jede Crontab-Datei ist die Ausführung unterschiedlicher Skripte geplant.
Wenn ich den Cronjob starte, wird der erste durch den älteren ersetzt.
crontab -u smarak /tmp/my-crontab
crontab -u smarak /root/my-alternate-crontab
Ist das oben Genannte für einen einzelnen Benutzer möglich?
Antwort1
Es gibt zwei Möglichkeiten, das Problem mit einer einzelnen Crontab zu umgehen.
Legen Sie Ihre Crontab-Einträge in Dateien in einem Verzeichnis wie beispielsweise ab ~/crontab.d/thisandthat.cron
und übertragen Sie anschließend alle Änderungen daraus in die System-Crontab mit:
cat ~/crontab.d/*.cron | crontab -
Die Erweiterung .cron
soll verhindern, dass versehentlich Sicherungsdateien von Editoren einbezogen werden. Beachten Sie, dass alle in den Dateien festgelegten Variablen auch für spätere Dateien gelten, da alle Dateien miteinander verknüpft sind.
Sie können auch etwas Ähnliches tun, wie es /etc/cron.hourly
in Debian und seinen Freunden implementiert ist. Das Hauptverzeichnis /etc/crontab
enthält Regeln wie diese:
17 * * * * root cd / && run-parts --report /etc/cron.hourly
Sie können einen einzelnen Crontab-Eintrag einrichten, um mehrere Programme auszuführen. Debian run-parts dir
ist ähnlich, for f in dir/* ; do "$f" ; done
außer dass es ungewöhnliche Dateinamen überspringt, um erneut zu vermeiden, dass von Editoren usw. erstellte Sicherungsdateien ausgeführt werden.
Antwort2
Nein. Jeder Benutzer hat eine Crontab. Warum? Weil die Crontab die „Tabelle“ („Tab“) aller Cron-Jobs ist, die einem einzelnen Benutzer zugeordnet sind.
Wenn Sie mehrere Dinge damit ausführen möchten cron
, fügen Sie einfach mehrere Zeilen in Ihre Crontab ein.
Wenn Sie mehrere Dateien mit Cron-Job-Spezifikationen haben, verketten Sie diese einfach:
cat crontab1 crontab2 crontab3 >my-crontab
crontab my-crontab
Antwort3
Sie können einfach den aktuellen Eintrag lesen und den neuen direkt danach anhängen.
Sobald Sie diesen ausführen:
crontab -u smarak /tmp/my-crontab
Im Idealfall könnten Sie etwa Folgendes tun:
crontab -u smarak <(cat /root/mein-alternatives-crontab) <(crontab -l)
Aber anscheinend akzeptiert Crontab das obige Formular nicht, also hier der Workaround:
cat /root/my-alternate-crontab <(crontab -l)| crontab -u smarak -
Bei mir funktioniert es. Hoffe, das hilft.