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

Najlepszym sposobem uruchamiania skryptów i poleceń podczas wstrzymania i wznowienia w systemie Linux przed zawieszeniem (lub po wznowieniu) jest użycie systemu inicjującego systemd. Wynika to z faktu, że system init współdziała bezpośrednio z jądrem i systemami zasilania. Nauka pracy z tym narzędziem pozwoli każdemu użytkownikowi uzyskać dużą kontrolę nad systemem operacyjnym Linux,

Proszę zrozumieć, że majstrowanie przy systemie inicjującym na komputerze może być niebezpieczne, jeśli nie wiesz, co robisz. Pamiętaj, aby jak najdokładniej postępować zgodnie z instrukcjami zawartymi w tym samouczku, aby uniknąć ewentualnych wpadek.

Nie każda nowoczesna dystrybucja Linuksa obsługuje system init systemd. Niektórzy używają upstart lub czegoś zupełnie innego. W tym samouczku skupimy się na systemd, ponieważ jest to najpopularniejszy system inicjujący. Jeśli chcesz wykonać to zadanie na czymś, co nie działa zgodnie z tym, co omówiliśmy w tym artykule, rozważ zapoznanie się z instrukcją obsługi systemu operacyjnego w celu uzyskania instrukcji.

Uwaga: użytkownicy Debiana powinni zamienić wszystkie wystąpienia usr / lib / systemd / system-sleep na / lib / systemd / system-sleep /

Wykonanie polecenia przed zawieszeniem

Aby uruchomić skrypt przed zawieszeniem, umieść dowolny plik skryptu bash w katalogu / usr / lib / systemd / system-sleep /. Same skrypty mogą zrobić wszystko, ale istnieje pewna składnia, której należy przestrzegać. Zacznij od otwarcia okna terminala. Używając sudo -s, uzyskaj powłokę roota.

Następnie otwórz nano edytor tekstu w katalogu uśpienia systemu:

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

Dodaj shebang na początku skryptu. Dodanie tego jest krytyczne, a bez tego interpreter nie będzie w stanie poprawnie odczytać kodu i poleceń.

#!/bin/bash/

Następna część skryptu to „if”. To powie systemowi kontroli mocy, że „jeśli” system ma się wyłączyć w celu zawieszenia, coś powinno się wydarzyć. Wklej poniższy kod:

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

Zmień sh /path/to/script/to/run.sh w skrypcie na cokolwiek, co chcesz uruchomić na komputerze z systemem Linux (lub serwerze) tuż przed wyłączeniem systemu w celu zawieszenia. Pamiętaj, że wiersz bezpośrednio po „if” nie musi być sh /path/to/script/to/run.sh. Możesz również użyć tego do wykonywania różnych poleceń. Tak długo, jak bash może rozpoznać to jako polecenie, będzie działać.

Ostatnią częścią skryptu „przed zawieszeniem” jest dodanie części „else, jeśli”. Ten aspekt skryptu nie musi być modyfikowany, ponieważ w tym przykładzie martwimy się o zrobienie czegoś przed awarią systemu, a nie przed ponownym przebudzeniem.

elif [ "${1}" == "post" ]; then
# nothing goes here
fi

Gdy wszystko zostanie dodane do pliku, naciśnij Ctrl + O, aby zapisać nano.

Uruchamianie polecenia po wznowieniu

Wykonanie polecenia po wznowieniu działa podobnie do uruchomienia czegoś przed zawieszeniem. Jedyna różnica polega na tym, że zamiast dodawać polecenie po części „if” skryptu, najważniejsza część kodu powinna występować po wierszu „elif”.

Aby utworzyć skrypt po wznowieniu, najpierw dodaj shebang jako pierwszą linię.

#!bin/bash

W następnym wierszu dodaj część skryptu „if”.

if [ "${1}" == "pre" ]; then
# nothing goes here

Po wklejeniu tego fragmentu kodu do skryptu bash przejdź w dół i wklej sekcję „else if”.

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

Po raz kolejny można napisać cokolwiek w wierszu „elif”. O ile jest to normalna operacja poleceń systemd i bash go uruchomi.

Uruchamianie poleceń podczas uruchamiania i wznawiania

Jeśli chcesz uruchomić dwa przeciwne polecenia; jeden przed zawieszeniem i jeden przy wznowieniu jest to możliwe. Oznacza to po prostu dostosowanie skryptu i dodanie wierszy zarówno pod linią „if”, jak i „elseif”.

Jak zwykle, zacznij od umieszczenia shebanga w skrypcie dla tłumacza.

#!/bin/bash

Następnie wklej sekcję if kodu.

if [ "${1}" == "pre" ]; then
# replace with command

W obszarze if zamień „# zamień na polecenie” na dowolne polecenie, które chcesz wykonać tuż przed wyłączeniem systemu. Następnie przejdź do sekcji „elif” i zrób to samo.

elif [ "${1}" == "post" ]; then
#  replace with command
fi

Zapisz plik za pomocą Ctrl + O,

Aktualizowanie uprawnień i używanie skryptu

Wszystkie niezbędne polecenia znajdują się w pliku skryptu, ale zanim będzie można go uruchomić, musisz zaktualizować uprawnienia. Otwórz terminal i uzyskaj roota za pomocą: su lub sudo -s. Następnie wykonaj:

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

Odtąd za każdym razem, gdy wstrzymasz lub wznowisz działanie, powinny zostać uruchomione niestandardowe polecenia wewnątrz skryptu.

Uwaga: masz pytania dotyczące uśpienia systemowego? Sprawdź instrukcję w man systemd-suspend.service.