Schlagwort-Archive: Shutdown

Linux: Skript ausführen beim Ausschalten

Ich bin ein fauler Hund und noch dazu vergesslich. Also, was passiert, sobald ich meine virtuelle Linux-Maschine ausschalte? Ich denke, verdammt, schon wieder das Backup vergessen!

Also habe ich nach einer Methode gesucht, ein (oder mehrere) Backup-Skripte auszuführen, sobald ich den Rechner ausschalte. Bei einer virtuellen Maschine wird das natürlich durch einen ACPI-Event simuliert. Aber Linux bemerkt da keinen Unterschied.

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
  • Netzwerk: AVM FRITZ!Box 7390, Host über WLAN verbunden

Wir installieren (falls noch nicht geschehen) ACPI, das Advanced Configuration and Power Interface.

sudo apt-get install acpi acpi-support

Alles wichtige findet sich unter etc/acpi/:

ls -la /etc/acpi/

Werfen wir einen Blick in die auszuführende Datei powerbtn-acpi-support.sh:

sudo nano /etc/acpi/powerbtn-acpi-support.sh

Zum Glück ist die Datei nicht sehr lang und erklärt sich sogar einem Laien wie mir einigermaßen. Wir suchen die Zeile weiter unten mit dem Kommentar: # Normal handling.

Und direkt vor dem /sbin/shutdown -h -P now platzieren wir den Aufruf zu unserem Skript. Das könnte dann etwa so aussehen:

# Normal handling.
/etc/init.d/backup_files.sh
/sbin/shutdown -h -P now "Power button pressed"

In backup_files.sh rufe ich meine verschiedenen Backup-Befehle auf.  Wie das funktioniert, habe ich schon hier: Und es geht doch: Linux, Skript ausführen beim Herunterfahren beschrieben.

Das war’s. Beim nächsten Ausschalten gibt es vorher erst einmal – wie es sich gehört – ein Backup.

Und es geht doch: Linux, Skript ausführen beim Herunterfahren

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