Jobs - Zeitgesteuerte Anweisungen
Prozesse oder Programme zu einem bestimmten Zeitpunkt starten oder wiederholt auszuführen.
at
Programme oder Scripte einmalig zu einer festgelegten Zeit ausführen, hierfür muss der Daemon „atd“ gestartet sein. Das Kommando „batch“ ist ein Teil von „at“ und führt Anweisungen nur aus, wenn die durchschnittliche Systemlast unter 1.5 sinkt oder ein Wert mit dem Befehl „atd“ festgelegt wird. Diese Werte können in der Datei „/var/spool/cron/atjobs/“ entnommen werden.
hans@home:~$ /etc/init.d/atd status atd is running.
Syntax:
- at [opt] [Zeitangabe] [Kommando/Script] ⇒ Jobs erstellen.
- batch ⇒ Führt Job aus, wenn Systemlast es zulässt.
- atq [opt] ⇒ Listet wartende Jobs.
- atrm [jobnummer] ⇒ Job löschen.
Das Kommando „atq“ zeigt eine Liste der wartenden Jobs. Mit „atrm“ lässt sich ein Job löschen. Mit [Strg + D] wird der Job bestätigt.
Zeitangaben:
- now | now + 3 days ⇒ Jetzt oder um diese Uhrzeit in drei Tagen. Mögliche Angaben sind auch minutes, hours, weeks und month.
- today HH:MM ⇒ Heute zu angegebener Uhrzeit.
- HH:MM | HH:MMam | HH:MMpm ⇒ Heute zu angegebener Uhrzeit.
- noon ⇒ Um 12:00 Mittags am nächsten Tag.
- teatime ⇒ Um 16:00.
- midnight ⇒ Mitternacht.
- tomorrow HH:MM ⇒ Morgen zu angegebener Uhrzeit.
- MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY, [CC]YY-MM-DD ⇒ Mögliche Datumsformate.
Optionen:
- -m ⇒ Ist der Job abgeschlossen wird eine mail an den Nutzer gesendet, selbst wenn der Job keine Ausgabe ausgibt.
- -f ⇒ Liest den Job von einer Zeilenweise geschriebenen Datei.
- -t ⇒ Ausführungszeit des Jobs im Format [[CC]YY]MMDDhhmm[.ss].
- -l ⇒ Liste der wartenden Jobs. Alias zu atq.
- -d [Jobnummer] ⇒ Löscht Job. Alias zu atrm.
- -b ⇒ Alias zu batch.
- -v ⇒ Zeigt die Ausführungszeit des Jobs.
- -c ⇒ Gibt die anstehenden Jobs nach STDOUT aus.
Berechtigungen:
- /etc/at.allow ⇒ Wenn die Datei vorhanden ist, dürfen nur Nutzer Jobs ausführen die in der Datei stehen.
- /etc/at.deny ⇒ Wenn die Datei vorhanden ist, jedoch keine at.allow, dürfen alle Nutzer Jobs ausführen die NICHT in der Datei stehen.
Beispiele:
inka@home:~$ at 17:10 today warning: commands will be executed using /bin/sh at> /home/inka/backup.sh at> <EOT> job 1 at Sat Nov 17 17:10:00 2010
Hier wird um 17:10 ein Backup durchgeführt.
inka@home:~$ echo '/home/inka/backup.sh' | at 18:40 warning: commands will be executed using /bin/sh job 8 at Sat Nov 17 18:40:00 2010
Alternative Schreibweise.
hans@home:~$ batch warning: commands will be executed using /bin/sh at> /home/hans/backup.sh at> <EOT> job 7 at Sat Nov 17 18:03:00 2010
Der batch Befehl führt das Kommando aus wenn die Systemlast es zulässt (Standardmäßig 1.5), kann jedoch über den atd Daemon eingestellt werden.
inka@home:~$ at 17:35 warning: commands will be executed using /bin/sh at> DISPLAY=:0 gcalctool at> <EOT> job 4 at Sat Nov 17 17:35:00 2010
Mit der Umgebungsvariable DISPLAY kann mit at die Grafische Oberfläche benutzt werden, dabei muß der Nutzer eingeloggt sein. Hier wird der Taschenrechner gestartet.
atd
Der „atd“ Daemon arbeitet die Jobs in der Warteschlange von „at“ und „batch“ ab und kann für Jobs modifiziert werden.
Syntax:
- atd [opt] [args]
Optionen:
- -l ⇒ Die Begrenzung der Auslastung für batch einstellen (Standardwert 1.5). Hierbei steht die 1 für die Anzahl der CPUs.
- -b [sec] ⇒ Intervall in Sekunden zwischen dem Start von zwei batch Jobs (Standardwert 60 sek.).
- -d ⇒ Schreibt Fehler Meldungen nach STDERR und syslog.
- -f ⇒ Startet atd als Vordergrundprozess.
- -s ⇒ Verarbeitet die at/batch Warteschlange nur einmal. Zur Kompatibilität mit älteren Versionen von atd. atd -s entspricht atrun.
cron
Das Programm „cron“ kann Scripte und Programme chronologisch zu einem bestimmten Zeitpunkt starten, hierfür muß der Daemon „crond“ gestartet sein. Der Daemon wird einmal pro Minute aktiv und analysiert, dabei auch alle cron-Dateien. Es können Systemweite Cronjobs die nur [root] bearbeiten darf erstellt werden. Auch Nutzer können Cronjobs erstellen sofern sie nicht durch die Berechtigungen davon ausgeschlossen wurden. Cron wird u.a. verwendet um Logdateien abzuschneiden und zu komrimieren, temporäre Dateien zu löschen, Verzeichnisse aktualisieren u.v.m.
Dateien und Verzeichnisse von cron | |
---|---|
/etc/crontab | Systemweite Konfigurationsdatei von cron |
/etc/cron.hourly | stündlich auszuführende Jobs |
/etc/cron.daily | täglich auszuführende Jobs |
/etc/cron.weekly | wöchentlich auszuführende Jobs |
/etc/cron.monthly | monatlich auszuführende Jobs |
/etc/cron.deny | Nutzerberechigungen von cron (Optional) |
/etc/cron.allow | Nutzerberechigungen von cron (Optional) |
/var/spool/cron | Speicherort für Benutzerspezifische cronjobs |
Berechtigungen:
- /etc/cron.allow ⇒ Wenn die Datei vorhanden ist, dürfen nur Nutzer Jobs ausführen die in der Datei stehen.
- /etc/cron.deny ⇒ Wenn die Datei vorhanden ist, jedoch keine cron.allow, dürfen alle Nutzer Jobs ausführen die NICHT in der Datei stehen.
/etc/crontab
Die globale Konfigurationsdatei von „cron“. Es können entweder Scripte in die jeweiligen Verzeichnisse kopiert werden oder die Datei „/etc/crontab“ direkt editiert werden. Die manpage zur „/etc/crontab“ erhält man mit „man 5 crontab“.
Beispiel einer crontab (Red Hat):
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly #
Cron soll bei seiner Ausführung die Shell bash verwenden. Die Pfadvariable wird neu deklariert, da cron eine Subshell öffnet. Bei Problemen oder einem Befehl mit Ausgabe bekommt root eine Nachricht, diese können auch an Nutzer gesendet werden.
Cron verwendet zur Laufzeit das Hauptverzeichnis als Heimatverzeichnis.
Unterhalb des Kommentars beginnen die cronjobs die über run-parts die Scripte in den Verzeichnissen ausführt.
Die ersten fünf Felder kennzeichnen den Zeitpunkt der Ausführung des Jobs.
- Erstes Feld ⇒ Minuten, mögliche Werte sind 0-59.
- Zweites Feld ⇒ Stunden, mögliche Werte sind 0-23.
- Drittes Feld ⇒ Tage, mögliche Werte sind 1-31.
- Viertes Feld ⇒ Monate, mögliche Werte sind 0-12.
- Fünftes Feld ⇒ Wochentag, mögliche Werte sind 0-7 (0 und 7 bedeuten Sonntag).
- user ⇒ Gibt den Nutzer an, der den Befehl ausführt.
- command ⇒ Enthält das auszuführende Kommando oder Script.
Die ersten fünf Felder können auch durch folgende Schlüsselwörter ersetzt werden.
- @reboot ⇒ Einmal beim Start.
- @hourly ⇒ Einmal pro Stunde (0 * * * *).
- @midnight ⇒ Einmal am Tag um 0:00 Uhr (0 0 * * *).
- @daily ⇒ Einmal am Tag um 0:00 Uhr (0 0 * * *).
- @weekly ⇒ Einmal pro Woche (0 0 * * 0).
- @monthly ⇒ Einmal im Monat (0 0 1 0 0).
- @yearly ⇒ Einmal im Jahr (0 0 1 1 *).
- @annualy ⇒ Einmal im Jahr (0 0 1 1 *).
Beispiele:
01 * * * * root run-parts /etc/cron.hourly
Hier werden eine Minute nach jeder vollen Stunde an allen Tagen, Monaten, Wochentagen die Scripte im Verzeichnis cron.hourly ausgeführt.
22 4 * * 0 root run-parts /etc/cron.weekly
Die Scripte in cron.weekly werden jeden Sonntag um 4:22 Uhr ausgeführt.
0 8,10,12,14 * * 1-5 root /usr/sbin/script
Script wird von Mo-Fr um 8, 10, 12 und 14 Uhr ausgeführt.
0 8 * */2 * root /usr/sbin/script
Script wird alle zwei Monate um 8 Uhr ausgeführt.
crontab
Mit dem Kommando „crontab“ können Nutzer eine „Cron“ Tabelle anlegen und editieren. Die „crontab“ Datei wird im Verzeichnis „/var/spool/cron/crontabs“ gespeichert. Die Manpage zum Befehl „crontab“ findet man mit „man 1 crontab“.
Syntax:
- crontab [opt]
Optionen:
- -e ⇒ Öffnet den Standardeditor zum bearbeiten der cron Tabelle des angemeldeten Nutzers.
- -l ⇒ Zeigt den Inhalt der Cron Tabelle an.
- -r ⇒ Löscht die crontab Datei aus /var/spool/cron.
- -u [user] ⇒ Hier kann root die crontab Datei eines anderen Nutzers anzeigen oder bearbeiten.
Beispiel:
frank@home:~$ crontab -e # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command */5 * * * * cat /home/frank/.bash_history | sort | uniq >> ~/Desktop/cmd-history */3 * * * * echo hello, cron | wall #
Im Beispiel wird zu Testzwecken alle fünf Minuten das Kommando „history“ in die Datei „cmd-history“ angehängt und alle drei Minuten eine Nachricht an die Angemeldeten Nutzer gesendet. Es können beliebig viele Jobs untereinander eingetragen werden oder als Kommando eine Textdatei in der Befehle zeilenweise eingetragen werden können.
frank@home:~$ crontab -e crontab: installing new crontab
Der Job ist nun aktiv.
root@home:/var/spool/cron/crontabs# ll insgesamt 4 -rw------- 1 frank crontab 1145 18. Nov 20:42 frank
Die crontab Datei befindet sich nun im Verzeichnis „/var/spool/cron/crontabs“.
Erzeugt der durch „crond“ aufgerufene Befehl eine Ausgabe oder Fehlermeldung, wird dieser per Mail an den Nutzer weitergeleitet. Um dies zu verhindern muß man die Ausgabe umleiten z.B. nach „/dev/null“.
*/5 * * * * ping -c 1 192.168.0.1 > /dev/null
Hier wird die Standardausgabe von ping nach „/dev/null“ umgeleitet.
*/5 * * * * ping -c 1 192.168.0.1 > /dev/null 2>&1
Hier wird die Standardausgabe und Fehlerausgabe von ping nach „/dev/null“ umgeleitet.
anacron
Der Dämon „anacron“ ist ein weiteres Programm zur Automatisierung von Befehlen. Anacron hat den Vorteil dass verpasste Jobs nachgeholt werden, falls das System heruntergefahren oder neugestartet wurde. Dieses Programm darf nur von [root] verwendet werden. Die Konfigurationsdatei von „anacron“ befindet sich in der Datei „/etc/anacrontab“. Scripte die „anacron“ ausführen soll, können in die Verzeichnisse cron.daily, cron.weekly und cron.monthly kopiert oder Verlinkt werden. Kürzere Perioden als täglich ist mit „anacron“ nicht möglich. Die Zeitstempel Dateien werden in der Datei „/var/spool/anacron/“ gespeichert.
Syntax:
- anacron [opt] [job]
Optionen:
- -f ⇒ Jobs ausführen, ignoriert Zeitstempel.
- -u ⇒ Zeitstempel auf aktuelles Datum setzen, Jobs werden nicht ausgeführt.
- -s ⇒ Nächster Job wird nur gestartet wenn letzter Job beendet ist.
- -n ⇒ Jobs sofort ausführen, ignoriert Zeitverzögerung nach Systemstart.
- -d ⇒ Jobs nicht im Hintergrund ausführen. Programmausgaben werden nach STDERR und syslog und mail geschrieben.
- -q ⇒ Unterdrücken von Meldungen auf Standard Fehler Ausgabe. Nur in Verbindung mit-d.
- -t [anacrontab] ⇒ Angegebene anacrontab, anstatt der Standard-anacrontab.
- -T ⇒ Testet anacrontab Datei auf Fehler.
- -S [spooldir] ⇒ Spool Verzeichnis für Zeitstempel Dateien selbst festlegen.
- -V ⇒ Zeigt Programmversion.
- -h ⇒ Zeigt kurze Hilfe.
Beispiel einer anacrontab (Red Hat):
# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 1 65 cron.daily run-parts /etc/cron.daily 7 70 cron.weekly run-parts /etc/cron.weekly 30 75 cron.monthly run-parts /etc/cron.monthly
- Erstes Feld ⇒ Periode der Jobausführung in Tagen (period).
- Zweites Feld ⇒ Startverzögerung nach Systemstart in Minuten (delay).
- Drittes Feld ⇒ Zeitstempel Datei (job-identifier).
- Viertes Feld ⇒ Befehl oder auszuführendes Script (command).
Die „/etc/anacrontab“ kann noch wie folgt angepaßt werden.
START_HOURS_RANGE=8-16
Wird das System nicht ausgeschaltet, entscheidet START_HOURS_RANGE zu welcher Tageszeit die Jobs ausgeführt werden.
RANDOM_DELAY=42
Zufällige Anzahl an Minuten zur Verzögerungszeit hinzufügen. Hier wird eine Verzögerung von 0-42 Minuten zur Startverzögerung hinzugefügt.
MAILTO="user@localhost"
Automatisch Mails versenden. Hierfür muß ein MTA (Mail Transfer Agent) installiert sein.
Fehler
Befehl funktioniert in der Shell, jedoch nicht im Cronjob
Ursachen hierfür kann sein, dass „cron“ den Pfad nicht findet, da „cron“ nicht die (PATH Variable) des Users benutzt. Als Lösung kann man entweder die (PATH Variable) in der Datei „crontab / anacrontab“ ergänzen oder ruft die Programme mit voller Pfadangabe auf.
Es kann auch möglich sein, dass sich das Verhalten einer über „cron“ gestarteten Shell von der Loginshell unterscheidet. Hierfür kann man die Konfigurationsdatei „crontab“ folgendermaßen anpassen:
0 8,10,12,14 * * 1-5 root /bin/bash --login /usr/local/sbin/script
"date" Formate in der "crontab"
Cron interpretiert "%" als Zeilenumbruch, werden z.B. date Formate in die crontab eingetragen. Hier müssen alle "%" Zeichen mit einem Backslash escaped (date +„\%Y\%m\%d-\%H_\%M“) oder über ein Script ausgeführt werden.
Cloud