it-swarm-eu.dev

Wie richte ich einen Cron-Job ein?

Ich möchte eine Aufgabe planen, die regelmäßig ausgeführt wird, und habe gehört, dass dies mit Cron möglich ist.

Wie füge ich Cron-Jobs in Ubuntu hinzu?

534
Gabriel Solomon

Fügen Sie ein Shell-Skript in einen der folgenden Ordner ein: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly oder /etc/cron.weekly.

Wenn dies für Sie nicht ausreicht, können Sie spezifischere Aufgaben hinzufügen, z. zweimal im Monat oder alle 5 Minuten. Gehen Sie zum Terminal und geben Sie Folgendes ein:

crontab -e

Dies öffnet Ihre persönliche crontab (cron Konfigurationsdatei). Die erste Zeile in dieser Datei erklärt alles! In jeder Zeile können Sie einen auszuführenden Befehl und seinen Zeitplan definieren, und das Format ist recht einfach, wenn Sie den Überblick haben. Die Struktur ist:

minute hour day-of-month month day-of-week command

Für alle Nummern können Sie Listen verwenden, z. 5,34,55 im Minutenfeld bedeutet, dass die Ausführung um 5, 34 und 55 nach jeder definierten Stunde erfolgt.

Sie können auch Intervalle verwenden. Sie sind wie folgt definiert: */20. Dieses Beispiel bedeutet, dass alle 20 Minuten, also in der Minutenspalte, 0,20,40 entspricht.

So führen Sie jeden Montag um 17.30 Uhr einen Befehl aus:

30 17 * * 1 /path/to/command

oder alle 15 Minuten

*/15 * * * * /path/to/command

Beachten Sie, dass der Wochentag von 0 bis 6 reicht, wobei 0 für Sonntag steht.

Sie können mehr lesen hier .

652
LassePoulsen

Wenn der Job, den Sie ausführen möchten, mit denselben Berechtigungen wie Ihr Benutzer ausgeführt werden kann, empfehle ich die Verwendung einer Benutzer-Crontab, die Sie bearbeiten können, indem Sie EDITOR="gedit" crontab -e ausführen (wobei die Crontab-Datei mit gedit bearbeitet wird) oder einfach crontab -e (verwendet den Standardeditor) in einem Terminal.

Wenn Sie beispielsweise alle 10 Minuten etwas ausführen möchten, fügen Sie eine Zeile wie diese hinzu

*/10 * * * * /usr/bin/somedirectory/somecommand

und speichern Sie die Datei.

Sie können den Inhalt des Benutzers crontab mit crontab -l sehen.

Um einen Cron-Job hinzuzufügen, der als root ausgeführt wird, können Sie die crontab von root bearbeiten, indem Sie Sudo crontab -e ausführen.

Am flexibelsten ist es, das System crontab /etc/crontab zu verwenden, das Sie nur mit Root-Rechten bearbeiten können. In dieser Datei muss der Benutzer jeden Befehl wie angegeben ausführen, damit Sie Ihre Befehle als root (falls Sie diese Berechtigungsstufe benötigen) oder als anderer Benutzer im System ausführen können.

Wenn Sie beispielsweise alle 10 Minuten etwas als root ausführen möchten, fügen Sie eine Zeile wie diese hinzu

*/10 * * * * root /usr/bin/somedirectory/somecommand

(beachten Sie die Hinzufügung des Benutzers zur Zeile)

Sie können den Inhalt der System-Crontab-Datei mit cat /etc/crontab anzeigen.

Weitere Informationen unter: https://help.ubuntu.com/community/CronHowto

101
Li Lo

Wenn Sie es vorziehen, eine grafische Benutzeroberfläche zu verwenden, können Sie im Software Center Geplante Tasks installieren (oder Sudo apt-get install gnome-schedule ausführen). Es wird eine leistungsstarke Benutzeroberfläche zum Hinzufügen von Cron-Aufgaben bieten.

Beachten Sie, dass bei Verwendung dieser Methode Aufgaben standardmäßig als Ihr eigener Benutzer und nicht als Root ausgeführt werden. Das ist normalerweise eine gute Sache.

52
Javier Rivera

Ich empfehle KDE's Task Scheduler (kde-config-cron)Install kde-config-cron . Greifen Sie über die Systemeinstellungen im Taskplaner Modul darauf zu.

Es verwaltet sowohl persönliche als auch System-Crontabs und die einfache Erstellung der Zeitgrenzen hat mich sehr überrascht (siehe Abbildung unten). Ich denke, dieser Teil wird wirklich unterschätzt.

enter image description here

26
gertvdijk

KDE Task Scheduler funktioniert nicht unter Ubuntu. Es funktioniert nur in KDE-Systemen wie KUbuntu. Für Nicht-KDE-Systeme bevorzugen Sie die Verwendung von gnome-schedule

$ Sudo apt-get install gnome-schedule

Die App ist Geplante Aufgaben im Dash.

11
Antonio

Ich wollte einen Cron-Job so einrichten, dass er ein Bash-Skript durchläuft, sodass beim Ausführen des Skripts ein Cron-Job hinzugefügt wird.

Ich habe festgestellt, dass, wenn Sie Gebrauch machen von:

crontab -e 

Dann erstellt es die Datei:

/var/spool/cron/crontabs/root

Dabei ist root der Name des Benutzers, der den Befehl crontab ausführt. Auf dieser Basis und zumindest in 14.04 können wir die folgenden Bash-Befehle ausführen, um einen neuen Cron-Job zu erstellen:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Wir müssen auch den richtigen Besitz für die Datei festlegen:

chown root:root /var/spool/cron/crontabs/root

Und stellen Sie die richtigen Berechtigungen ein:

chmod 600 /var/spool/cron/crontabs/root

Wenn sich beim Ausführen von crontab -e bereits Cron-Jobs in der Liste befinden, können Sie diese mit dem folgenden Befehl an die Liste anhängen:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
10

Beispiel für das Ausführen des Skripts test_cron.sh von cron jede Minute unter Ubuntu 18.04 unter Verwendung eines symbolischen Links:

test_cron.sh Datei:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Wenn Sie in Ihrem Skript Umgebungsvariablen wie $USER in Pfaden verwenden möchten, ist es besser, einen genauen Pfad einzugeben, da bash Ihre Variablen zur Ausführungszeit nicht kennt.

myname ist der Benutzername (Teil der Root-Gruppe, ich bin nicht sicher, ob Root-Berechtigungen erforderlich sind).

Ermöglichen Sie Benutzern das Festlegen von Cron-Jobs. Bei Bedarf wird eine Datei erstellt:

Sudo nano /etc/cron.allow

root
myname

Der Pfad zum Skript lautet /home/myname/Shell/test_cron.sh

Ich habe den Besitzer gewechselt und es ausführbar gemacht:

Sudo chown myname /home/myname/Shell/test_cron.sh
chmod +x /home/myname/Shell/test_cron.sh

Ich habe einen symbolischen Link hinzugefügt:

Sudo ln -s /home/myname/Shell/test_cron.sh /usr/bin/test_cron

Gespeichert als myname Ich habe jede Minute eine neue Aufgabe hinzugefügt, um test_cron auszuführen.

crontab -e

*/1 * * * * test_cron

So überprüfen Sie, ob der Befehl in der Liste enthalten ist:

crontab -l

*/1 * * * * test_cron

Ausführung überprüfen

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
2
Alexander