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
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.