Kann ein einzelner Benutzer mehrere Crontab-Dateien haben?

Kann ein einzelner Benutzer mehrere Crontab-Dateien haben?

Angenommen, ich erstelle zwei Crontab-Dateien.

  1. /tmp/my-crontab
  2. /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.cronund übertragen Sie anschließend alle Änderungen daraus in die System-Crontab mit:

cat ~/crontab.d/*.cron | crontab -

Die Erweiterung .cronsoll 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.hourlyin Debian und seinen Freunden implementiert ist. Das Hauptverzeichnis /etc/crontabenthä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 dirist ähnlich, for f in dir/* ; do "$f" ; doneauß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.

verwandte Informationen