Wie richte ich einen Cron-Job ein?

534

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?

Gabriel Solomon
quelle

Antworten:

655

Setzen Sie ein Shell - Skript in einem dieser Ordner: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyoder /etc/cron.weekly.

Wenn Ihnen dies nicht ausreicht, können Sie spezifischere Aufgaben hinzufügen, z. B. 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, die Sie verwenden können, werden Listen, z. B. 5,34,55im Minutenfeld, um 5, 34 und 55 nach jeder definierten Stunde ausgeführt.

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

So führen Sie jeden Montag um 5:30 Uhr nachmittags 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 hier mehr lesen .

LassePoulsen
quelle
7
Diese sind systemweit und werden mit hohen Berechtigungen ausgeführt. Ich würde nichts dort setzen, es sei denn, es gibt ein dringendes Bedürfnis nach Zugang oder Erlaubnis. Versuchen Sie als Faustregel, Dinge ohne Fähigkeiten zu tun. Daher gefällt mir diese Antwort besser: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales
5
@Marcelo Morales, der auch die angegebenen Befehle als root ausführt! Wenn Sie sudo hingegen nicht verwenden, erstellen Sie eine Benutzer-crontab und diese wird als der Benutzer ausgeführt, der sie erstellt hat!
LassePoulsen
4
* / 15 * * * * / path / to / command war sehr praktisch für mich! Vielen Dank!
Andrew Odendaal
18
Beachten Sie, dass diese Änderungen automatisch angewendet werden und Sie nichts neu starten / laden müssen.
Molomby
6
Ein weiterer praktischer Tipp ist, dass Sie stattdessen */15 * * * * /path/to/commandtun @reboot /path/to/commandkönnen, um beim Start etwas auszuführen.
Kenneth Worden
102

Wenn der Job, den Sie ausführen möchten, mit den gleichen Berechtigungen wie Ihr Benutzer ausgeführt werden kann, empfehle ich die Verwendung einer Benutzer-Crontab, die Sie ausführen können EDITOR="gedit" crontab -e(wobei die Crontab-Datei mit gedit bearbeitet wird) oder einfach crontab -e(wobei der Standardeditor verwendet wird). 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 sehen crontab -l.

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

Am flexibelsten ist die Verwendung der System-Crontab, /etc/crontabdie 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 sehen cat /etc/crontab.

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

Li Lo
quelle
1
Hier ist ein süßer interaktiver Cron-Manipulator, mit dem Sie die englische Sprache zur Cron-Zeit crontab.guru
CTS_AE
52

Wenn Sie es vorziehen, eine grafische Benutzeroberfläche zu verwenden, können Sie im Software Center Geplante Aufgaben installieren (oder ausführen sudo apt-get install gnome-schedule). 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.

Javier Rivera
quelle
3
nicht verfügbar für 16.04 anscheinend bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash
@TankorSmash Sie können es hier bekommen
M. Becerra
Paketanforderungen können am 16.04.
Odysseus Ithaca
26

Ich empfehle KDE Task Scheduler ( kde-config-cron) Installieren Sie 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.

Bildbeschreibung hier eingeben

gertvdijk
quelle
11

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.

Antonio
quelle
Es wurde nicht gefunden für Ubuntu 16.04
SaidbakR
Bitte schauen Sie sich I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… an . Es gibt ein Paket zum Herunterladen @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . $ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio
10

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 crontab -edie Liste bereits Cron-Jobs enthält, können Sie diese mit dem folgenden Befehl anhängen:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Craig van Tonder
quelle
2

Beispiel für das Ausführen eines Skripts test_cron.shvon 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 Umgebungsvariablen in Ihrem Skript wie $USERin Pfaden verwenden möchten, ist es besser, einen präzisen Pfad einzugeben, da bash Ihre Variablen zur Ausführungszeit nicht kennt.

myname ist 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

Angemeldet, da mynameich test_cronjede Minute eine neue Aufgabe hinzugefügt habe, die ausgeführt werden soll.

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)
Alexander
quelle