
Programme periodisch automatisch ausführen
Wichtiger Hinweis:
Ich verwende Cronjobs für einige Aufgaben auf dem Server wie auch auf meinem Desktop, bin aber in keinster Weise ein Profi was
die automatische Ausführung von Programmen oder Diensten angeht!
Man kann dieses Thema betreffende Anforderungen auf diverse Arten lösen in Linux, ich gehe hier nur auf mir bekannte, benutzte und
geprüfte ein.
Da mich das Thema aber sehr interessiert bin ich offen für Anregungen oder konkrete Beispiele wie man etwas "schöner" lösen könnte.
Programme mit Cron beim Start des Systems ausführen
Was ist Cron?
Aus dem Wikipedia-Artikel über Cron:
Der Cron-Daemon dient der zeitbasierten Ausführung von Prozessen in Unix und unixartigen Betriebssystemen wie Linux, BSD oder
Mac OS X, um wiederkehrende Aufgaben – sogenannte Cronjobs – zu automatisieren.
Häufig führt der Cron-Daemon wichtige Programme für die Instandhaltung des Systems aus, wie zum Beispiel Dienste für das regelmäßige
Archivieren und Löschen von Logdateien.
Was ist die Crontab?
Die auszuführenden Anweisungen werden in einer benutzereigenen Tabelle gespeichert, der sogenannten Crontab. Der Begriff
leitet sich ab von griechisch chronos = die Zeit und lat. tabula = die Tafel oder das Brett und bedeutet demnach so viel
wie „Zeittafel“ (also „Stundenplan“). Diese Tabelle besteht aus sechs Spalten; die ersten fünf dienen der Zeitangabe (Minute, Stunde,
Tag, Monat, Wochentag), alle weiteren Zeichen bis zum Zeilenumbruch werden als der auszuführende Befehl aufgefasst. Jedes Mal, wenn ein
spezifischer Zeitpunkt erreicht wird, wird der entsprechende Befehl, meist ein Shellskript, ausgeführt.
Weitere Infos hier: Link zum Ubuntu-Artikel über Cron der sehr gut
geschrieben und sehr ausführlich ist. Der Text gilt im grossen Ganzen für alle Linux-Distributionen.
Beispiele
Beim Start ausführen
Damit ein Programm bei jedem Start ausgeführt wird, ist es nötig dafür in der Crontab einen Starteintrag anzulegen.
Dafür nimmst Du den Befehl crontab zur Hand.
So öffnen wir die Crontab für Root zum Editieren:
sudo crontab -e
Am Ende der Datei kannst Du diese Zeile einfügen, damit das Programm Programmname bei jedem Start des Computers ausgeführt wird:
@reboot cd /pfad/zu/dem/programm && sudo Programmname
Die Cronbefehle werden im Homeverzeichnis des Besitzers der Crontab ausgeführt, deswegen macht es hier immer
Sinn den kompletten Pfad vor dem Programm mitzugeben oder wie hier beschrieben in das Programmverzeichnis zu wechseln.
@reboot ist eine Abkürzung für einmalig, beim Start. Es gibt mehrere solche Abkürzungen:
Abkürzung |
Ausführungszeitpunk |
Cron Schreibweise |
@reboot |
einmalig, beim Start |
gibt es nicht |
@daily |
einmal pro Tag |
0 0 * * * |
@midnight |
einmal pro Tag |
0 0 * * * |
@hourly |
einmal pro Stunde |
0 * * * * |
@weekly |
einmal pro Woche |
0 0 * * 0 |
@monthly |
einmal im Monat |
0 0 1 * * |
@annually |
einmal im Jahr |
0 0 1 1 * |
@yearly |
einmal im Jahr |
0 0 1 1 * |
Einmal die Woche ausführen
So wird script1.sh einmal die Woche am Sonntag um 23:59 ausgeführt und die Ausgaben verworfen:
59 23 * * 0 /home/BENUTZERNAME/script/script1.sh > /dev/null
rc.local, rc.monthly, rc.weekly und rc.daily
rc.local
Man kann in der Startdatei des Betriebssystems (rc.local) ein Kommando einpflegen, das dann bei jedem Systemstart ausgeführt wird.
Diese Variante habe ich gewählt, um die Trim-Funktion für SSDs unter Ubuntu automatisch auszuführen. Mehr Infos findest Du unter
Linux / Debian > Eine SSD unter Linux verwenden.
Wir öffnen dafür die Datei /etc/rc.local:
sudo nano /etc/rc.local
So sieht die Datei im Anfangszustand aus:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
Oberhalb der Linie exit 0 fügen wir diese Zeile ein:
Befehl
Jetzt die Datei speichern und schliessen und den Computer neu starten. Der gewünschte Befehl wird jetzt
immer bei einem Computerstart ausgeführt.
rc.monthly, rc.weekly, rc.daily
Wenn man ein script in den Ordner /etc/rc.monthly legt, wird das Script jeden Monat einmal ausgeführt.
Wenn man ein script in den Ordner /etc/rc.weekly legt, wird das Script jede Woche einmal ausgeführt.
Diese Option verwende ich für wöchentliche MySQL Dumps, die ich dann per FTP herunterladen kann. Anleitung dafür findest Du unter
Linux / Debian > MySQL Datenbank sichern und wiederherstellen.
Wenn man ein script in den Ordner /etc/rc.daily legt, wird das Script jeden Tag einmal ausgeführt.
Services
Die Services, die man mit sudo service SERVICE start | stop | restart verwenden kann, sind unter /etc/init.d als Shellscript
(oder Links zu den Shellscripten) gespeichert, die die zusätzlichen Befehle auswerten und je nach Befehl andere Routinen ausführen.
Link zu Autostart Tips für Ubuntu Only
Infos zum Dokument
Author: Christoph Iseli
Datum: 03.12.2014
Letzte Änderung: 25.03.2015