Jak uruchamiać skrypty i polecenia przy zawieszaniu i wznowieniu w systemie Linux

Photo of author

By maciekx

Najskuteczniejszym sposobem na uruchamianie skryptów oraz poleceń w systemie Linux w trakcie zawieszania i wznawiania systemu jest wykorzystanie systemu inicjującego systemd. Warto to zauważyć, ponieważ system init działa bezpośrednio z jądrem oraz systemami zarządzania zasilaniem. Zrozumienie działania tego narzędzia pozwala użytkownikom na uzyskanie znacznej kontroli nad systemem operacyjnym Linux.

Ważne jest, aby pamiętać, że modyfikowanie systemu inicjującego na komputerze może być ryzykowne, jeśli brak Ci doświadczenia. Zawsze staraj się ściśle przestrzegać instrukcji zawartych w tym przewodniku, aby uniknąć ewentualnych problemów.

Nie każda nowoczesna dystrybucja Linuksa korzysta z systemu init systemd. Niektóre z nich mogą stosować upstart lub inne rozwiązania. W tym przewodniku skoncentrujemy się na systemd, który jest najpowszechniej używanym systemem inicjującym. Jeśli chcesz wykonać podobne zadania w innej konfiguracji, zalecamy zapoznanie się z dokumentacją swego systemu operacyjnego.

Uwaga: użytkownicy systemu Debian powinni zmienić wszystkie wystąpienia /usr/lib/systemd/system-sleep na /lib/systemd/system-sleep/.

Uruchamianie polecenia przed zawieszeniem

Aby uruchomić skrypt przed zawieszeniem systemu, umieść dowolny plik skryptu bash w katalogu /usr/lib/systemd/system-sleep/. Skrypty mają dużą elastyczność, ale należy przestrzegać określonej składni. Rozpocznij od otwarcia terminala i uzyskaj dostęp do powłoki roota za pomocą polecenia sudo -s.

Następnie otwórz edytor tekstu nano w katalogu odpowiedzialnym za uśpienie systemu:

nano /usr/lib/systemd/system-sleep/pre-suspend.sh

Na początku skryptu dodaj shebang. To kluczowy element, ponieważ bez niego interpreter nie odczyta poprawnie kodu i poleceń.

#!/bin/bash

Kolejnym krokiem jest dodanie fragmentu skryptu „if”, który zasygnalizuje systemowi zarządzania zasilaniem, że jeśli system ma być zawieszony, należy wykonać określone działania. Wklej poniższy kod:

if [ "${1}" == "pre" ]; then
sh /path/to/script/to/run.sh

Zmień „sh /path/to/script/to/run.sh” na dowolne polecenie, które chcesz uruchomić na swoim komputerze z systemem Linux (lub serwerze) przed jego zawieszeniem. Pamiętaj, że wiersz po „if” nie musi być jedynie „sh /path/to/script/to/run.sh”. Możesz także dodawać inne polecenia, o ile bash potrafi je rozpoznać.

Ostatnia część skryptu „przed zawieszeniem” to dodanie sekcji „else if”. Ten fragment nie wymaga modyfikacji, ponieważ w tym przypadku skupiamy się na działaniach przed zawieszeniem systemu, a nie po jego wznowieniu.

elif [ "${1}" == "post" ]; then
# nic nie jest potrzebne
fi

Po zakończeniu edytowania skryptu naciśnij Ctrl + O, aby zapisać zmiany w nano.

Uruchamianie polecenia po wznowieniu

Uruchamianie poleceń po wznowieniu działa na podobnych zasadach jak przed zawieszeniem. Różnica polega na tym, że kluczowa część kodu powinna znajdować się po sekcji „elif” w skrypcie.

Rozpocznij od dodania shebanga jako pierwszej linii skryptu:

#!/bin/bash

Następnie umieść sekcję „if”:

if [ "${1}" == "pre" ]; then
# nic nie jest potrzebne

Po dodaniu tego fragmentu kodu, przejdź w dół i wklej sekcję „elif”.

elif [ "${1}" == "post" ]; then
sh /path/to/script/to/run.sh
fi

Jak wcześniej, możesz umieścić w wierszu „elif” dowolne polecenie, które będzie poprawnie obsługiwane przez systemd i bash.

Uruchamianie poleceń podczas zawieszania i wznawiania

Jeśli chcesz uruchomić dwa przeciwstawne polecenia – jedno przed zawieszeniem i drugie po wznowieniu – jest to jak najbardziej możliwe. Wystarczy dostosować skrypt i dodać odpowiednie wiersze w sekcjach „if” oraz „elif”.

Jak zwykle, rozpocznij od umieszczenia shebanga w skrypcie:

#!/bin/bash

Następnie dodaj sekcję „if”:

if [ "${1}" == "pre" ]; then
# zamień na polecenie

W sekcji „if” zmień „# zamień na polecenie” na dowolne polecenie, które chcesz wykonać przed zawieszeniem systemu. Następnie przejdź do sekcji „elif” i zrób to samo.

elif [ "${1}" == "post" ]; then
# zamień na polecenie
fi

Zapisz plik przy użyciu Ctrl + O.

Aktualizacja uprawnień i uruchamianie skryptu

Wszystkie potrzebne polecenia znajdują się w pliku skryptu, ale zanim będzie on gotowy do uruchomienia, musisz zaktualizować jego uprawnienia. Otwórz terminal i uzyskaj dostęp do roota poprzez: su lub sudo -s. Następnie wykonaj polecenie:

chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh

Od tej pory, za każdym razem, gdy wstrzymasz lub wznowisz system, powinny zostać uruchomione niestandardowe polecenia zawarte w skrypcie.

Uwaga: masz pytania dotyczące systemowego wstrzymywania? Sprawdź dokumentację w man systemd-suspend.service.


newsblog.pl