2197816

Autostarts und Cronjobs: Automatische Programmstarts für Linux

08.06.2016 | 11:37 Uhr |

Der zeitgesteuerte Start von Programmen und Aktionen gehört vor allem in den Serverallltag, hat aber auch auf dem Linux-Desktop seine Einsatzgebiete. Autostart, Cron und automatische Bashscripts sind die geläufigen Startrampen.

Auf Linux-Systemen läuft standardmäßig der Crondienst für zeitgesteuerte Programmstarts und Scripts. Ferner gibt es Startrampen, um beim Systemstart, nach der Anmeldung oder beim Aufruf einer Fernwartungs-Shell Programme automatisch auszuführen. Dieser Beitrag erklärt die wichtigsten Selbststarter.

„Startprogramme“ unter Ubuntu und Mint

Automatische Programmstarts nach der Anmeldung sind unentbehrlich, um wichtige Systemsoftware wie Audio oder Aktualisierungsbenachrichtigung bereitzustellen. Auch Tools wie Autokey oder Cuttlefish, die in nachfolgenden Beiträgen vorgestellt werden, sollten nach der Anmeldung sofort laufen. Ideal ist dieser Startzeitpunkt eigentlich nicht, weil das System während und nach der Anmeldung vielbeschäftigt ist. Die meisten Distributionen bieten ein grafisches Tool, um die Autostarts zu verwalten. Unter Ubuntu und Mint heißt das Tool gnome-session-properties („Startprogramme“). Durch Deaktivieren des Häkchens schalten Sie dort einen Autostart ab, über die Schaltfläche „Entfernen“ verschwindet es ganz aus dem Verwaltungstool (bleibt aber das Programm erhalten). Mit „Hinzufügen“ definieren Sie eigene Autostarts, wobei ein beliebiger Name und neben „Befehl“ der exakte Programmaufruf notwendig ist. Hier sind einfache Programmaufrufe, Aufrufe mit Schaltern, Shell-Scripts (mit kompletter Pfadangabe) oder der Start von Benutzerdateien möglich. Sie können die Autostarts sogar mit Sleep-Kommandos zeitlich verzögern:

sh –c "sleep 30; update-notifier"

Die Updatebenachrichtigung, die sich standardmäßig mit dem Befehl „update-notifier“ in die Startprogramme einträgt, würde hier erst nach 30 Sekunden ausgelöst.

Die Autostarts liegen unter „~/.config/autostart“ (User) sowie unter „/etc/xdg/autostart/“ (global).
Vergrößern Die Autostarts liegen unter „~/.config/autostart“ (User) sowie unter „/etc/xdg/autostart/“ (global).

Alle Autostarts unter „Startprogramme“ gelten für den aktuellen Benutzer und werden als „desktop“-Dateien unter „~/.config/autostart“ gespeichert. Die zusätzlichen vom System benötigten Autostarts liegen unter „/etc/xdg/autostart/“ und können mit einem Editor bearbeitet werden, wobei der Programmaufruf in der Zeile „Exec=“ definiert ist. Alternativ können Sie aber auch das Tool „Startprogramme“ verwenden, wenn Sie es mit sudo im Terminal starten.

Auch interessant - Linux-Top-20: So finden Sie Ihr Lieblings-Linux

bashrc und rclocal auf Servern

Die versteckte Datei „.bashrc“ liegt im Home-Verzeichnis jedes Benutzers und gilt folglich für den angemeldeten Benutzer. Alle dort enthaltenen Kommandos werden beim Start eines Terminals abgearbeitet. Am Desktopsystem ist es nicht praktikabel, jeden Terminalstart mit diversen Programmen zu begleiten, anders steht es auf Servern, die nur gelegentliche Kontrollbesuche per SSH-Terminal erhalten: Hier kann es sinnvoll sein, mit dem Start der Konsole gleich einen Dateimanager zu laden. Wer mehrere Server betreibt, kann sich gleich beim Start von der bashrc mit uname -a oder umfassend mit inxi -v7 informieren lassen, auf welchem Gerät er sich befindet.

Für Befehle, die unabhängig vom angemeldeten Benutzer vor der Benutzeranmeldung abgearbeitet werden sollen, eignet sich auf Debian-Systemen (Debian, Ubuntu, Mint, Raspbian) die Datei „/etc/rc.local“. Um die Datei zu bearbeiten, benötigen Sie root-Rechte:

sudo nano /etc/rc.local

Vor der letzten Zeile „exit 0“, die bleiben muss, tragen Sie die Kommandos ein. Grafische Programme scheiden aus und auch für Bashkommandos gibt es Einschränkungen, da an dieser Stelle noch keine Pfadvariable existiert und jede Interaktion ausfällt. Bei Syntaxfehlern in der „rc.local“ steigt das System aus und ignoriert den Rest der Datei. Die Fehlersuche in der „rc.local“ ist deshalb heikel, zumal Korrekturen einen Neustart erfordern. Alle Befehle sollten daher vorab sorgfältig getestet werden. Für einfache mount-Kommandos auf Datenservern, die Sie aufgrund wechselnder Datenträger nicht in die fstab eintragen wollen, ist die „rc.local“ aber der ideale Starter.

Typische Crontab: Vier Jobs, die der Server täglich um 8:00 und 9:00 Uhr sowie stündlich abarbeitet.
Vergrößern Typische Crontab: Vier Jobs, die der Server täglich um 8:00 und 9:00 Uhr sowie stündlich abarbeitet.

Lese-Tipp: Linux-Server im Netzwerk absichern - 6 Tipps

Zeitgesteuerte Tasks mit Cron

Der Zeitplaner Cron nutzt eine systemweite Datei „/etc/crontab“, die für alle Benutzer gilt und im Terminal mit root-Rechten bearbeitet werden kann:

sudo crontab -e

Zusätzlich kann jeder Benutzer in einer eigenen Crontab Programme laden, indem er crontab -e ohne „sudo“ aufruft. Die Benutzer-Crontab finden Sie unter „/var/spool/cron/crontabs/“. Crontab-Einträge benötigen fünf Zeitangaben (Minute, Stunde, Tag, Monat, Wochentag) mit Leerzeichen oder Tabulatoren getrennt, danach den Programmbefehl. Ein Backup, das täglich um 22:00 Uhr laufen soll, kann dann so aussehen:

0 22 * * * rsync -av /home/sepp/ /media/sepp/USB/backup

Der Asterisk (*) bedeutet wie üblich „alle“ an der betreffenden Stelle – hier also „an jedem Tag, jedem Monat und jedem Wochentag“. Um Formatfehler bei relativ einfachen Zeitangaben zu vermeiden, gibt es simplifizierende Variablen, die Sie anstelle der fünf Zeitangaben verwenden können (@hourly, @daily, @weekly, @midnight). So ist etwa die Variable „@midnight“ identisch mit der ausgeschriebenen Schreibweise „0 0 * * *“.

Auf Desktopsystemen mit grafischer Oberfläche lässt sich das manuelle Editieren der Crontab vermeiden: Das komfortable Frontend gnome-schedule („Geplante Aufgaben“) ist über das Software-Center oder mit

sudo apt-get install gnome-schedule

im Terminal schnell nachinstalliert und vereinfacht das Anlegen von Cronjobs erheblich. Die wichtigsten Intervalle wie „Jeden Tag“ finden Sie klickfertig vor, und die „Vorschau“ bietet in der Form „An jedem Tag um 00:00“ eine gute Kontrolle.

Lese-Tipp: So überwachen Sie Linux-Dateisysteme mit dem Verzeichnisspion Incron

Anacron: Cron startet seine Jobs exakt zu den eingetragenen Zeiten. Kann ein Cronjob, der um 8.00 Uhr fällig ist, nicht starten, weil der PC erst ab 8:05 läuft, fällt die Aufgabe unter den Tisch. Auf Desktop-PCs, die nicht permanent laufen, ist folglich ein wichtiger Job schnell verpasst. Als Abhilfe gibt es das Tool Anacron, das ausstehende Cronjobs nachholen kann, sobald der Rechner läuft. Nach unserer Erfahrung ist Anacron aber kompliziert und dadurch fehleranfällig. Zuverlässiger ist es, Cronjobs mit kürzeren Zeitintervallen festzulegen und den Zeitpunkt so zu legen, dass das Gerät höchstwahrscheinlich läuft.

Cron-apt: Auf Linux-Servern ist ein regelmäßiges Systemupdate keineswegs so selbstverständlich wie am Desktop, wo ein Notifier den Benutzer erinnert. Auch hierfür gibt es (für Debian-Systeme) eine Speziallösung: cron-apt. Das Paket ist in den Standardrepositories verfügbar und zeigt unter „/etc/cron-apt/config“ und „/etc/cron-apt/action.d/3-download“ seine Standardkonfiguration. Theoretisch kann cron-apt vollautomatisch Updates beziehen und installieren. Dazu genügt es, in der „/etc/cron-apt/action.d/3-download“ in der Zeile

dist-upgrade -d -y -o APT […]

den Schalter „-d“ zu löschen. Da Updates aber nicht immer glatt verlaufen, empfehlen wir ein Mindestmaß an Interaktion. Dazu genügt es, in der „.bashrc“ eine Erinnerung einzubauen

read -p"Updaten (j/n)? " YESNO

und nach „j“ das obligatorische

sudo apt-get update
sudo apt-get dist-upgrade

folgen lassen. Und wer seinen Server wochenlang zu vergessen pflegt (was für den Server spricht), kann sich auf seinem Desktop-PC von Cron an einen wöchentlichen Ausflug zur SSH-Konsole erinnern lassen.

0 Kommentare zu diesem Artikel
2197816