Init-Skripte und Systemkonfiguration

Debian Swirl

http://www.black-board.net
Es ist nicht gestattet dieses Tutorial losgelöst von dem Namen BlackBoard und der URL zu verbreiten.


Das Tutorial befindet sich noch in der Entwicklung. Wenn du mitwirken möchtest, melde dich hier.
Dies ist ein Aufruf - wenn du Ahnung hast, mach mit!



1. Was sind Init-Skripte?


Init Scripte werden von init gestartet und beendet, wenn das System hoch- oder runterfährt. Dabei werden sie mit 'start' oder 'stop' als Parameter aufgerufen. Die Init-Scripte liegen in /etc/init.d und können jederzeit mit /etc/init.d/script start, restart, oder stop aufgerufen werden.

Diese Initscripte werden dann in die einzelnen Runlevel verlinkt. Ein Runlevel ist im Prinzip eine Marke, wie weit das System hochfährt. 1 steht für den Single-User Modus und das bedeutet, dass alle Netzwerk- und Internetdienste nicht geladen werden. 2 war früher das Runlevel ohne X-Server. 3 ist das Standard-Runlevel, 4 und 5 sind unbelegt, 6 bedeutet Neustart, 0 bedeutet runterfahren.

Das aktuelle Runlevel kann man mit dem Befehl `runlevel' herausfinden. Ändern kann man das Runlevel mit `init <runlevel>' Die Init-Scripte, die für die einzelnen Runlevel auszuführen sind, werden in /etc/rcX.d mit X = Runlevel verlinkt. Dabei werden sie mit einem Präfix versehen. Sxy steht für ein Start-Runlevel (bedeutet 'start' als Parameter) und Kxy für ein Stop-Runlevel ('stop' als Parameter) die Zahlen x und y legen die Reihenfolge fest, in der die Scripte ausgeführt werden. Man kann nun ein selbst geschriebenes Script selbstständig verlinken oder
das Tool rcconf (apt-get install rcconf) installieren. Mir rcconf lassen sich alle Scripte in /etc/init.d in die Runlevel verlinken.


Ein kleines Beispiel


In /etc/init.d ist ein Beispiel init-Script namens skeleton zu finden, das man benutzen kann um ein eigenes init-Script zu bauen. Allerdings stelle ich hier jetzt ein eigenes ganz kleines init-Script vor, dass ganz einfach beim Hochfahren /var/tmp löscht und beim Runterfahren die home-Verzeichnisse sichert.


maintain.sh

#!/bin/bash

case "$1" in
start)
echo -n "Cleaning up /var/tmp "
rm -rf /var/tmp &> /dev/null
echo "done."
;;
stop)
echo -n "Saving home-dirs ... "
for i in `ls /home/; do
echo -n "$i "
tar zcf /backup/$i.tgz /home/$i 2&>1 > /dev/null
done
echo ".done"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac

Über Sinn und Zweck dieses Scriptes brauchen wir nicht zu diskutieren, aber es soll ja nur ein Beispiel sein. Ich hab mir das übrigens aus dem Kopf gedrückt und nicht getestet! Eine restart-Direktive einzubauen wäre hier wenig sinnvoll, aber das dürfte ja jetzt kein Problem mehr sein. Aber wenn man jetzt ein chmod 700 macht und es in /etc/init.d packt und mit Hilfe von rcconf verlinkt, dann würde es laufen und seine Funktion erfüllen.


Andere wichtige System-Daemons und Konfigurationsdateien


Cron

Der Cron-Daemon sollte auf eurem Server standardmäßig installiert sein und funktionieren. Daher will ich hier nur ein paar Tipps zur Benutzung anbringen. Mit crontab -e gelangt ihr in ein vi-Fenster, in dem ihr die Crontab ändern könnt. Drückt auf 'i' um in den INSERT-Modus von vi zu gelangen und dann kanns schon losgehen.

In der Crontab sind 6 Spalten je mit einem Leerzeichen getrennt vorgesehen:
<min> <stunde> <tag> <monat> <wochentag> <befehl>
Hier könnt ihr jetzt einstellen, welcher Befehl wann ausgeführt werden soll. Soll zum Beispiel jeden Sonntag um 6:00 ein apt-get update gemacht werden, sieht das so aus:
0 6 * * 0 apt-get update

Die * bedeuten, dass diese Einträge ignoriert werden, oder einfach immer wahr sind. Will man alle 5 Minuten etwas tun geht das auf 2 Arten:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * tu was
oder
*/5 * * * * tu was
wobei das zweite natürlich angenehmer ist.

Soll etwas täglich ausgeführt werden, gebt nicht * * * * * ein, sondern auf jeden Fall eine Uhrzeit. Der Befehl wird sonst jede Minute ausgeführt. Mit <ESC> kommt ihr in den vi-Modus und mit ':wq' verlasst ihr den vi und speichert die Änderungen. Um die Änderungen zu verwerfen ':q!'. Die neue Crontab wird dann automatisch eingerichtet.


Logrotate

Der Logrotate-Daemon sollte auf jedem System installiert sein und laufen. Ich möchte hier nur darauf hinweisen, dass es ihn gibt und was er kann. Logrotate dreht standardmäßig die eingestellten Logfiles durch, wobei die Logfiles aus den letzten X Tagen/Wochen/Monaten rotiert werden. z.B. /var/log/apache/access.log access.log1 access.log.2.gz .....bis 52 wöchentlich in der Default-Einstellung.

Wenn ihr jetzt wollt, dass logrotate die Logfiles rotiert und auch noch nach /data/logfiles sichert (z.B.) dann müsst ihr in der /etc/logrotate.d/apache folgendes einstellen:


/var/log/apache/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache reload > /dev/null
endscript
prerotate
gzip -c /var/log/apache/access.log >
/data/logs/apache-access.log-`date +%Y-%m-%d-%H%M`.gz
gzip -c /var/log/apache/error.log >
/data/logs/apache-error.log-`date +%Y-%m-%d-%H%M`.gz
endscript
}

Das Original-Script habe ich leider nicht mehr, aber neu dürfte der prerotate-Teil sein. Hier sage ich dem logrotate-Script, dass es vor der Rotation die Dateien access.log und error.log in /data/logs/ mit Datum und
Uhrzeit speichern soll. Man kann die Rotation seinen eigenen Wünschen anpassen und auch neue Dateien in /etc/logrotate.d einfügen. Ich habe zum Beispiel eine abgewandelte Form der apache-Config für meine ftp-logs benutzt.

Für mehr Infos empfehle ich die manpage zu logrotate. Das syslog in /var/log/syslog wird witzigerweise nicht von logrotate rotiert, sondern direkt aus der cron.daily. Wer also auch sein syslog speichern will, kann eine Zeile dieser Art:
gzip -c /var/log/syslog > /data/logs/syslog-`date +%Y-%m-%d-%H%M`.gz
in den oberen Teil der Datei /etc/cron.daily/syslogd schreiben.

Weitere wichtige System-Daemons und Configs-Files mögern mir gerade nicht einfallen - sollte euch noch was wichtiges einfallen, dann meldet euch bei mir.

Verfasser


Letzte Aktualisierung 19.06.2006 von LX