Die effizienteste Methode, um Skripte und Befehle vor dem Ruhezustand (Suspend) oder nach dem Aufwachen (Resume) unter Linux zu starten, ist die Nutzung des systemd-Init-Systems. Dies ist darauf zurückzuführen, dass das Init-System direkt mit dem Kernel und den Energieverwaltungssystemen zusammenarbeitet. Die Beherrschung dieses Tools ermöglicht es jedem Anwender, eine hohe Kontrolle über sein Linux-Betriebssystem zu erlangen.
Bitte beachten Sie, dass das Experimentieren mit dem Init-System Ihres Rechners ohne entsprechendes Wissen riskant sein kann. Befolgen Sie die Anweisungen in diesem Tutorial sorgfältig, um potenzielle Probleme zu vermeiden.
Nicht alle aktuellen Linux-Distributionen setzen auf das systemd-Init-System. Einige nutzen Upstart oder andere Alternativen. In diesem Tutorial konzentrieren wir uns auf systemd, da es das am weitesten verbreitete Init-System ist. Sollten Sie diese Aufgabe auf einem System ausführen wollen, das nicht mit systemd arbeitet, ziehen Sie bitte das Handbuch Ihres Betriebssystems für spezifische Anleitungen zu Rate.
Hinweis: Nutzer von Debian sollten alle Pfade `usr/lib/systemd/system-sleep` durch `/lib/systemd/system-sleep/` ersetzen.
Skriptausführung vor dem Ruhezustand
Um ein Skript vor dem Übergang in den Ruhezustand auszuführen, platzieren Sie eine beliebige Bash-Skriptdatei im Verzeichnis `/usr/lib/systemd/system-sleep/`. Die Skripte können jegliche Aktionen durchführen, es ist jedoch wichtig, eine bestimmte Syntax einzuhalten. Starten Sie zuerst ein Terminalfenster und erlangen Sie Root-Rechte mittels `sudo -s`.
Öffnen Sie als Nächstes den Texteditor Nano innerhalb des `system-sleep`-Verzeichnisses:
nano /usr/lib/systemd/system-sleep/pre-suspend.sh
Fügen Sie am Anfang des Skripts den Shebang hinzu. Dies ist unerlässlich, da der Interpreter sonst den Code und die Befehle nicht korrekt interpretieren kann.
#!/bin/bash/
Der nächste Abschnitt des Skripts ist die „if“-Anweisung. Sie signalisiert dem Energiemanagementsystem, dass eine bestimmte Aktion ausgeführt werden soll, „wenn“ das System kurz vor dem Ruhezustand steht. Fügen Sie den folgenden Code ein:
if [ "${1}" == "pre" ]; then sh /pfad/zum/auszufuehrenden/skript.sh
Ersetzen Sie `sh /pfad/zum/auszufuehrenden/skript.sh` mit dem Befehl, der auf Ihrem Linux-Rechner (oder Server) ausgeführt werden soll, kurz bevor das System in den Ruhezustand geht. Beachten Sie, dass der Befehl direkt nach dem „if“ nicht zwingend `sh /pfad/zum/auszufuehrenden/skript.sh` sein muss. Sie können hier auch andere Befehle ausführen. Solange Bash ihn als Befehl erkennt, wird er ausgeführt.
Der letzte Teil des Skripts für „vor dem Ruhezustand“ ist das „else if“. Dieser Teil muss in diesem Beispiel nicht verändert werden, da es uns hier primär darum geht, Aktionen vor dem Herunterfahren des Systems durchzuführen und nicht beim Aufwachen.
elif [ "${1}" == "post" ]; then # Hier passiert nichts fi
Wenn alles in der Datei eingefügt ist, speichern Sie mit Strg + O.
Skriptausführung nach dem Aufwachen
Die Skriptausführung nach dem Aufwachen ähnelt der Vorgehensweise vor dem Ruhezustand. Der Hauptunterschied liegt darin, dass anstelle eines Befehls nach dem „if“-Teil des Skripts der relevante Codeblock nach der „elif“-Zeile steht.
Um ein „Post-Resume“-Skript zu erstellen, fügen Sie zunächst den Shebang als erste Zeile hinzu.
#!bin/bash
Fügen Sie in der nächsten Zeile die „if“-Anweisung des Skripts ein.
if [ "${1}" == "pre" ]; then # Hier passiert nichts
Nachdem Sie diesen Code in das Bash-Skript eingefügt haben, gehen Sie eine Zeile runter und fügen Sie den Abschnitt „else if“ hinzu.
elif [ "${1}" == "post" ]; then sh /pfad/zum/auszufuehrenden/skript.sh fi
Auch hier gilt: Sie können jeden gewünschten Befehl unterhalb der „elif“-Zeile platzieren. Solange es sich um einen regulären Befehl handelt, wird er von systemd und bash ausgeführt.
Befehle beim Start und Fortsetzen ausführen
Wenn Sie zwei gegensätzliche Befehle ausführen möchten; einen vor dem Ruhezustand und einen nach dem Aufwachen, ist dies ebenfalls möglich. Es erfordert lediglich, das Skript so anzupassen, dass Zeilen sowohl unterhalb der „if“- als auch unterhalb der „elseif“-Zeile hinzugefügt werden.
Beginnen Sie wie üblich damit, den Shebang im Skript für den Interpreter zu deklarieren.
#!/bin/bash
Fügen Sie als Nächstes den „if“-Abschnitt des Codes ein.
if [ "${1}" == "pre" ]; then # durch Befehl ersetzen
Ersetzen Sie unterhalb von „if“ `# durch Befehl ersetzen` mit dem Befehl, den Sie ausführen möchten, bevor das System herunterfährt. Wechseln Sie dann zum „elif“-Abschnitt und verfahren Sie genauso.
elif [ "${1}" == "post" ]; then # durch Befehl ersetzen fi
Speichern Sie die Datei mit Strg + O.
Aktualisierung der Berechtigungen und Nutzung des Skripts
Alle benötigten Befehle befinden sich nun in der Skriptdatei, aber bevor sie ausgeführt werden kann, müssen Sie die Berechtigungen aktualisieren. Öffnen Sie ein Terminal und erlangen Sie Root-Rechte mit: `su` oder `sudo -s`. Führen Sie anschließend aus:
chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh
Von nun an sollten bei jedem Übergang in den Ruhezustand oder beim Aufwachen die benutzerdefinierten Befehle innerhalb des Skripts ausgeführt werden.
Hinweis: Haben Sie Fragen zu systemd system-sleep? Konsultieren Sie das Handbuch mit `man systemd-suspend.service`.