Inhaltsverzeichnis
Erklärung
Mit Hilfe eines Cron Jobs können Aufgaben auf einem System automatisch ausgeführt werden.
Jeder Cron Job besteht aus drei Komponenten:
- Skript, welches ausgeführt werden soll
- Befehl, welcher das Skript regelmäßig ausführt
- Aktion oder Ausgabe des Skripts
In unserem Beipspiel erstellen wir einen Cron-Job, der die Netzwerkkonfiguration bei Root-Servern (VDServer) automatisch bei einem Neustart lädt.
benötigte Programme installieren
Mit Hilfe der nachfolgenden Befehle wird das benötigte Paket installiert.
Debian / Ubuntu
apt-get update & apt-get -y upgrade
apt-get install cron
Fedora / Centos
yum -y update
yum install vixie-cron
Einen Cron-Task anlegen
Um nun einen Cron-Job anzulegen, muss die Datei /etc/crontab angepasst werden. Hierzu kann die Datei per Editor aufgerufen werden oder alternativ über den Befehl "crontab -e".
Beim erstmaligen Aufruf dieser Datei werden Sie nach einem Editor gefragt, den Sie für die Anpassungen nutzen möchten. Hier ist meist nano bereits vorausgewählt. Sie können hier einen Editor Ihrer Wahl verwenden und über die Eingabe der entsprechenden Zahl auswählen.
crontab -e
select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]:
Die Datei /etc/crontab
GNU nano 4.8 /tmp/crontab.cyfsyk/crontab
# 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)
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/Tim/Skript/IP_Change
# /home/Tim/Skript/IP_Change definiert den Speicherort des Skripts
# 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 )Datei
Erläuterung der Zeile # m h dom mon dow user command
# : definiert die Zeile als Kommentar
m : gibt die Minute an, in der ein Cron-Job ausgeführt werden soll (0-59)
h : gibt die Stunde an, in der ein Cron-Job ausgeführt werden soll (0-23)
dom (day of month) : gibt den Tag des Monats an (1-31)
mon (month) : gibt den Monat an (1-12)
dow (day of week) : gibt den Tag der Woche an. (0-7) Bitte beachten Sie, dass die Zahl 0 und 7 für den Sonntag stehen. Montag wäre hier die 1.
* : any
Beispiel:
17 * * * * root cd / && run-parts --report /etc/cron.hourly
Hier wird zu jeder Minute 17 der Cron-Job ausgeführt. Da hier keine Angaben zum Tag, Monat und Stunde angegeben sind, wird der Cron-Job zu jeder Minute 17 ausgeführt.
Lösung ohne Skript
Im nachfolgenden wird davon ausgegangen, dass eine Kopie einer funktionierenden Netzwerkkonfiguration unter dem folgenden Beispielpfad angelegt wurde:
/home/user/IP_Backup/IP_Konfiguration_Backup
Für die Verwendung ohne Skript wird die folgende Zeile in die Datei /etc/crontab eingefügt.
@reboot root sleep 15 && cat /home/user/IP_Backup/IP_Konfiguration_Backup >> /etc/network/interfaces/eth0
Hinweis: Bitte prüfen Sie vorab die Bezeichnung Ihres Netzwerkinterfaces. In unserem Beispiel verwenden wir eth0.
Im Anschluss der Änderung muss der Netzwerkdienst neugestartet werden. Hier wählen Sie, abhängig von Ihrem System, einen der folgenden Befehle:
@reboot root sleep 25 && service network restart
@reboot root sleep 25 && systemctl restart network
Lösung per Skript
Im nachfolgenden wird davon ausgegangen, dass eine Kopie einer funktionierenden Netzwerkkonfiguration unter dem folgenden Beispielpfad angelegt wurde:
/home/user/IP_Backup/IP_Konfiguration_Backup
Ebenfalls wird davon ausgegangen, dass das nachfolgende Skript unter /home/user/Skript/IP_Change erstellt wurde.
Das Skript IP_Change
#!/bin/bash
cat /home/user/IP_Backup/IP_Konfiguration_Backup >> /etc/network/interfaces/eth0
#Abhängig von dem Verwendeten System muss das Netzwerk über den Befehl service oder systemctl neu gestartet werden bitte löschen sie das Kommentarzeichen vor dem für sie korrekten Befehl:
#service network restart
#systemctl restart network
Nun muss das Skript noch ausführbar gemacht werden:
chmod +x /home/user/Skript/IP_Change
Cronjob für die Ausführung des Skripts anlegen
Um das zuvor angelegte Skript über einen Cronjob bei jedem Neustart auszuführen wird die folgende Zeile in die Datei /etc/crontab eingefügt.
#Führt das Skript aus
@reboot root sleep 15 && /home/user/Skript/IP_Change
Nach erfolgreicher Einrichtung wird das Skript bei jedem Serverneustart ausgeführt.
Eine eventuelle Fehlermeldung wird an das Postfach des root-Users auf dem System gesendet.
Ebenfalls werden diese innerhalb der Logdateien /var/log/syslog bzw. /var/log/messages gespeichert.