531 Stimmen

Wie erstellt man einen Cron-Job mit der Bash automatisch ohne den interaktiven Editor?

Verfügt crontab über ein Argument zur Erstellung von Cron-Jobs ohne Verwendung des Editors (crontab -e). Wenn ja, wie würde der Code lauten, um einen Cronjob aus einem Bash-Skript zu erstellen?

0 Stimmen

14 Stimmen

Leider zeigen die meisten Top-Antworten hier nur, wie man crontab modifiziert - wenn auch auf einigermaßen sichere Weise - aber ich denke, das ist insgesamt der falsche Ansatz. Besser, sicherer und einfacher ist es, eine Datei in {{cron.d}} abzulegen, und es gibt (derzeit) wenig beachtete Antworten, die erklären, wie man das macht, wenn man weiter unten sucht.

0 Stimmen

Danke @gregmac. Ich habe hinzugefügt dieses Beispiel nachdem ich Beispiele von verschiedenen Seiten gelesen und es selbst ausprobiert habe.

5voto

Gerald Schade Punkte 493

Eine Variante, die crontab nur dann bearbeitet, wenn die gewünschte Zeichenkette dort nicht zu finden ist:

CMD="/sbin/modprobe fcpci"
JOB="@reboot $CMD"
TMPC="mycron"
grep "$CMD" -q <(crontab -l) || (crontab -l>"$TMPC"; echo "$JOB">>"$TMPC"; crontab "$TMPC")

5voto

Anh Quach Punkte 21
(2>/dev/null crontab -l ; echo "0 3 * * * /usr/local/bin/certbot-auto renew") | crontab -

cat <(crontab -l 2>/dev/null) <(echo "0 3 * * * /usr/local/bin/certbot-auto renew") | crontab -

Aktuelle Crontab ausschreiben

crontab -l > mycron 2>/dev/null

echo neues cron in cron-Datei

echo "0 3 * * * /usr/local/bin/certbot-auto renew" >> mycron

neue Cron-Datei installieren

crontab mycron

rm mycron

3voto

chuck Punkte 912

Wenn Sie den Vixie Cron verwenden, z.B. bei den meisten Linux-Distributionen, können Sie einfach eine Datei in /etc/cron.d mit dem individuellen Cronjob anlegen.

Dies gilt natürlich nur für Root. Wenn Ihr System dies unterstützt, sollten Sie dort mehrere Beispiele sehen. (Beachten Sie den Benutzernamen in der Zeile, in der gleichen Syntax wie in der alten /etc/crontab)

Es ist ein trauriges Manko von Cron, dass es keine Möglichkeit gibt, dies als normaler Benutzer zu handhaben, und dass so viele Cron-Implementierungen überhaupt keine Möglichkeit haben, dies zu handhaben.

3voto

akash Punkte 626

Bash-Skript zum Hinzufügen von Cron-Jobs ohne den interaktiven Editor. Der folgende Code hilft beim Hinzufügen eines Cronjobs mit Linux-Dateien.

#!/bin/bash

cron_path=/var/spool/cron/crontabs/root

#cron job to run every 10 min.
echo "*/10 * * * * command to be executed" >> $cron_path

#cron job to run every 1 hour.
echo "0 */1 * * * command to be executed" >> $cron_path

2voto

gsus Punkte 21

Meine bevorzugte Lösung wäre die folgende:

(crontab -l | grep . ; echo -e "0 4 * * * myscript\n") | crontab -

So stellen Sie sicher, dass Sie die neue Leerzeile am unteren Rand richtig behandeln. Um Probleme mit crontab zu vermeiden, sollten Sie die crontab-Datei normalerweise mit einer leeren neuen Zeile abschließen. Das obige Skript stellt sicher, dass es zuerst alle Leerzeilen mit dem "grep ."-Teil entfernt und dann eine neue Leerzeile am Ende mit dem " \n " am Ende des Skripts. Dadurch wird auch verhindert, dass eine leere Zeile über dem neuen Befehl steht, wenn Ihre bestehende crontab-Datei mit einer Leerzeile endet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X