Automatische Netzwerkkonfiguration bei Root-Servern nach Reboot

 

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. 

 

Kommentieren nicht möglich