[[:tux|{{ :linux.png?40|}}]] ===== Der Task Scheduler »cron« ===== Der (Debian) cron-Daemons wird in unixoiden Systemen zur Ausführung periodisch wiederkehrender Aufgaben verwendet. Als root dürfen Sie auch >>crontabs<<((http://www.manpagez.com/man/5/crontab/)) für andere Benutzer anlegen (crontab -u $USER -e). Die >>crontabs<< aller User befinden sich im cron-Spoolverzeichnis unter >>/var/spool/cron/crontab<<, die Datei >>/etc/crontab<< ist das systemweit gültige crontab-File. Im Gegensatz zu den cron-Tabellen der einzelnen User befindet sich in der >>/etc/crontab<< eine zusätzliche siebte Spalte, welche den User angibt unter welchen Rechten das Kommando läuft (IdR ist das root). ==== Struktur einer »crontab« ==== * * * * * User auszuführender Befehl | | | | | | | | | | | +---> Benutzer (nur /etc/crontab) | | | | +-----> (dow) Day of week; Wochentag (0-7) (Sonntag =0 oder =7) | | | +-------> (mon) Monat (1-12) | | +---------> (dom) Day of month; Tag (1-31) | +-----------> (h) Stunde (0-23) +-------------> (m) Minute (0-59) **Beispiele:** 15 8 * * * 15 8 * * 1,2,3,4,5 15 8 * * 1-5 15 8 * 1-4,7,10-12 * 05,35 * * * * 5,10,15,20,25,30,35,40,45,50,55 * * * * */5 * * * * * */2 * * * ==== »crontab« anlegen und bearbeiten ==== Wie bereits erwähnt darf root >>crontabs<< für die im System vorhandenen Benutzer anlegen: # crontab -u pronto -e Das og Kommando legt zB eine >>crontab<< für den Benutzer (-u) >>pronto<< an und startet gleich den in >>/etc/alternatives/editor<< eingestellten Editor (-e) und wartet auf Ihre Eingabe. Die »crontab« für den Benutzer pronto wird in >>/etc/spool/cron/crontabs<< angelegt. # ls -l /var/spool/cron/crontabs/ -rw------- 1 pronto crontab 263 31. Okt 21:46 pronto Als normaler Benutzer haben Sie auf das Verzeichnis >>/var/spool/cron/crontabs<< keinen Zugriff (auch keinen read only), Sie können sich aber Ihre persönliche >>crontab<< direkt über das >>crontab -l<< Kommando anzeigen lassen: $ whoami pronto $ $ crontab -l # m h dom mon dow command * 22 * * * touch /tmp/pronto.txt Die >>crontab<< für den User pronto ist im og Beispiel zB so eingestellt, dass täglich um 22:00 die Datei >>/tmp/pronto.txt<< angelegt wird. Als root können Sie weiterhin die >>crontabs<< aller Benutzer verwalten, hängen Sie hier einfach den gewünschten Benutzernamen hinter den Parameter >>-u<<: # whoami root # crontab -l -u pronto # m h dom mon dow command * 22 * * * touch /tmp/pronto.txt Wenn Sie einzelne Jobs **löschen** möchten, können Sie wieder den Editor mit >>crontab -e<< aufrufen; mit >>crontab -r<< löschen Sie alle Einträge bzw. die gesamte >>crontab<< in einem Rutsch. ==== Die systemweite »crontab« → /etc/crontab ==== Neben den >>crontabs<< der einzelnen Benutzer gibt es mit der >>/etc/crontab<< eine systemweite Cron-Tabelle, die Aufgaben der Systemverwaltung automatisiert. Im Gegensatz zu den Cron-Tabellen der einzelnen Benutzer gibt es hier ein siebtes Feld, welches den Usernamen enthält unter welchen der Befehl ausgeführt wird. Eine typische >>crontab<< auf einem Debian Linux System sieht zB folgendermaßen aus: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) # Hier stehen schon einige Einträge, welche Sie sich zu Nutze machen können, welche aber vermutlich erst mal einer Erklärung bedürfen. Hier finden Sie vier Befehle welche jede Stunde 17 Minuten nach jeder vollen Stunde ausgeführt werden >>cron.hourly<<, jeden Tag um 06:25 >>cron.daily<<, jede Woche am Sonntag um 06:47 >>cron.weekly<< und jeden ersten Tag im Monat um 06:52 >>cron.monthly<< ausgeführt werden. Die >>test<<((http://unixhelp.ed.ac.uk/CGI/man-cgi?test)) Anweisung >>test -x /usr/sbin/anacron<< bewirkt, dass die Programme in >>/etc/cron.[daily|weekly|monthly]<< nur dann ausgeführt werden, wenn >>anacron<<((http://linux.die.net/man/8/anacron)) **nicht** eingerichtet ist, was standardmäßig auch nicht der Fall ist und bei einem 24/7 Server auch nicht notwendig ist, da dieser zu jedem geplanten Zeitpunkt läuft. Wäre >>anacron<< eingerichtet, würden die Befehle auch dann beim Systemstart (mit einer konfigurierbaren Verzögerung) ausgeführt werden, wenn das System zum angegebenen Zeitpunkt nicht eingeschaltet war, >>cron<< tut dies **nicht**. Die Kommandoverkettung >>||<< (= EXOR ≙ exklusives Oder) führt das zweite Kommando nur dann aus, wenn das erste **erfolglos** war. Andernfalls würden >>cron<< und >>anacron<< beide versuchen die Aufträge in >>/etc/cron.[daily|weekly|monthly]<< auszuführen. Die >>run-parts<<((http://unixhelp.ed.ac.uk/CGI/man-cgi?run-parts+8)) Anweisung führt dann jedes Skript im angegeben Verzeichnis aus. Sie können sich demnach auch dieser bereits vorkonfigurierten Tasks bedienen und Ihr Skript einfach in ein passendes Verzeichnis (daily, weekly oder monthly) legen und >>cron<< den Rest erledigen lassen, wenn sich der Zeitpunkt mit Ihren Anforderungen vereinbaren lässt. Aber auch hier sollten Sie mit Umsicht und Bedacht ans Werk gehen. Vermeiden Sie Last-intensive Jobs in den Standardtasks, da ja zum selben Zeitpunkt die anderen Jobs auch ausgeführt werden. Legen Sie sich hierfür einen neuen Eintrag in der >>crontab<< an, der sich mit den vorhandenen Systemressourcen besser vereinbaren lässt oder verwenden Sie >>/etc/cron.d<< ==== /etc/cron.d ==== Das Verzeichnis >>/etc/cron.d/<< wird von >>cron<< ebenfalls nach Dateien durchsucht, welche Jobs zum Ausführen enthalten. Jedoch muss hier die Zeitkonfiguration **in** den einzelnen Dateien festgelegt werden. Die Syntax entspricht der >>/etc/crontab<<, was uA bedeutet, dass das User-Feld besetzt sein muss: */3 * * * * root /bin/rm /tmp/test >>cron<< ließt nun in regelmäßigen Abständen (wenige Minuten) die Dateien in >>/etc/cron.d<< und führt die dort konfigurierten Kommandos zum festgelegten Zeitpunkt aus. Im og Beispiel wird alle drei Minuten die Datei /tmp/test gelöscht. Auszug aus der cron Manpage:\\ >>cron also reads /etc/crontab, which is in a slightly different format (see crontab(5)). Additionally, cron reads the files in /etc/cron.d: it treats the files in /etc/cron.d as in the same way as the /etc/crontab file (they follow the special format of that file, i.e. they include the user field). However, they are independent of /etc/crontab: they do not, for example, inherit environment variable settings from it. The intended purpose of this feature is to allow packages that require finer control of their scheduling than the /etc/cron.{daily,weekly,monthly} directories to add a crontab file to /etc/cron.d. Such files should be named after the package that supplies them. Files must conform to the same naming convention as used by run-parts(8): they must consist solely of upper- and lower-case letters, digits, underscores, and hyphens. If the -l option is specified, then they must conform to the LSB namespace specification, exactly as in the --lsbsysinit option in run-parts. \\ \\ **Verwandte Artikel:** [[:tux:at|-> Der UNIX Task Scheduler »at«]] [[:mac:schedule|-> Launchd Task Scheduler konfigurieren (Mac OSX)]] \\ \\ --- //pronto 2010/11/01 00:12// {{keywords>crontab cron.houly cron.daily cron.weekly cron.monthly cron.d anacron run-parts}}