Geradezu abenteuerlich sind die Aussagen einiger selbsternannter Experten beim Thema „Skripte ausführen beim Herunterfahren“. Von „Linux fährt man nicht herunter“ bis zu „ist überhaupt nicht möglich“ habe ich alles schon lesen dürfen.
Dabei ist es ganz einfach. Ich benutze diese Methode auf meiner virtuellen Entwicklungsmaschine, um Dateien und Datenbanken nach einem Arbeitstag auf dem Host zu sichern.
Hier also meine schnelle: „Klicken-und-vergessen“-Methode für
- Oracle VM VirtualBox Manager
- Host: Windows 7 64 Bit
- Gast: Ubuntu Linux 14.04.1 – 64 Bit (Hostname: minlux)
- Netzwerk: AVM FRITZ!Box 7390, Host über WLAN verbunden
Die auszuführenden Dateien befinden sich in /etc/init.d/.
Wir legen ein Skript an, das nichts anderes macht, als eine leere Datei namens goodbye.txt ins Home-Verzeichnis des Users zu schreiben. Das Skript, das das erledigen soll, erhält den Namen custom-shutdown.sh.
echo -e '#!/bin/sh\ntouch /home/'$USER'/goodbye.txt' | sudo tee /etc/init.d/custom-shutdown.sh
Wir machen die Datei ausführbar:
sudo chmod +x /etc/init.d/custom-shutdown.sh
Prüfen, ob alles geklappt hat:
ls -l /etc/init.d/custom-shutdown.sh cat /etc/init.d/custom-shutdown.sh
Nun legen wir in /etc/rc0.d/ einen Link zum Skript. Beachte: das Präfix K04 vor dem Dateinamen, ohne das geht es nicht.
sudo ln -s /etc/init.d/custom-shutdown.sh /etc/rc0.d/K04custom-shutdown.sh
Fertig. Nun starten wir die Maschine neu
sudo reboot
Test, ob goodbye.txt auch wirklich angelegt wurde:
ls -l ~
Man beachte, dass die Datei für den Nutzer root angelegt worden ist, falls man noch irgendetwas damit plant.
Skript beim Hochfahren ausführen
Wer möchte, kann Skripte auch ausführen lassen beim Hochfahren des Rechners. Dann muss der Link aber nicht in rc0.d sondern in rc6.d platziert werden.
echo -e '#!/bin/sh\ntouch /home/'$USER'/hello.txt' | sudo tee /etc/init.d/custom-start.sh sudo chmod +x /etc/init.d/custom-start.sh sudo ln -s /etc/init.d/custom-start.sh /etc/rc6.d/K04custom-start.sh
WICHTIG: Server neu starten
Wenn man Datenbanksicherungen beim Herunterfahren anlegen möchte, so muss man natürlich beachten, dass die Datenbank schon längst selbst heruntergefahren ist. Also muss man diese kurz wieder starten:
#!/bin/sh date >> /media/sf_share/shutdown.log # das ist mein geteiltes Verzeichnis mit dem Host sudo /etc/init.d/mysql start # hier wird MySQL wieder gestartet exec /etc/webmin/mysql/backup.pl --all >> /media/sf_share/shutdown.log # mit Hilfe eines Webmin-Skriptes wird das Backup angestoßen sudo /etc/init.d/mysql stop # und hier müssen wir MySQL natürlich wieder sauber beenden
Mein Dank geht an http://ubuntu.flowconsult.at/linux/ubuntu-14-10-shutdown-script-with-rc0-d-rc6-rcd/ und https://unix.stackexchange.com/questions/34963/running-script-before-shutdown-seemingly-not-working. Mehr Informationen zum Runlevel: https://en.wikipedia.org/wiki/Runlevel#Ubuntu