Jak spouštět skripty a příkazy při pozastavení a obnovení v systému Linux
Nejspolehlivější metoda, jak aktivovat skripty a specifické instrukce v průběhu uspávání a obnovování systému Linux, spočívá ve využití nástroje systemd init. Tato volba je dána tím, že systemd init je v přímé interakci s jádrem a systémy řízení spotřeby energie. Osvojením si práce s tímto nástrojem získá uživatel značnou kontrolu nad svým linuxovým operačním systémem.
Důležité upozornění: Neuvážená manipulace se systémem init může vést k nestabilitě vašeho počítače. Doporučuje se postupovat přesně podle instrukcí v tomto návodu, abyste předešli možným komplikacím.
Není každá současná linuxová distribuce postavena na systemd init. Některé alternativně používají upstart, či jiná řešení. Tento návod se zaměřuje na systemd, protože jde o nejčastěji používaný init systém. Pokud potřebujete řešit stejný úkol na systému s jinou implementací, doporučujeme nahlédnout do dokumentace vašeho operačního systému.
Důležité pro uživatele Debianu: Nahraďte prosím všechny výskyty /usr/lib/systemd/system-sleep za /lib/systemd/system-sleep/.
Spouštění příkazů před přechodem do režimu spánku
Pro aktivaci skriptu před přechodem do spánku umístěte libovolný bash skript do adresáře /usr/lib/systemd/system-sleep/. Skripty mohou provádět libovolné úkoly, je ale nezbytné dodržovat danou strukturu. Začněte otevřením okna terminálu a získáním root přístupu pomocí sudo -s.
Dále se v textovém editoru nano přesuňte do adresáře system-sleep:
nano /usr/lib/systemd/system-sleep/pre-suspend.sh
Do začátku skriptu vložte shebang. Tento krok je klíčový pro správnou interpretaci kódu a příkazů.
#!/bin/bash/
Další částí skriptu je podmínka "if". Ta sděluje systému pro řízení napájení, že "pokud" systém přechází do spánku, má se provést určitá akce. Vložte následující kód:
if [ "${1}" == "pre" ]; then
sh /cesta/k/skriptu/ktery/se/ma/spustit.sh
Změňte sh /cesta/k/skriptu/ktery/se/ma/spustit.sh na cokoliv, co si přejete vykonat na vašem Linux PC (nebo serveru) těsně předtím, než se systém uvede do režimu spánku. Řádek následující přímo za "if" nemusí být jen spouštění skriptu. Můžete zde zadat i různé jiné příkazy. Pokud je bash dokáže rozpoznat, budou provedeny.
Poslední částí skriptu "before suspend" je přidání části "else if". Tuto část v tomto případě není nutné upravovat, protože se v této situaci soustředíme na akci před spánkem, nikoliv po probuzení.
elif [ "${1}" == "post" ]; then
# zde nic nevkládejte
fi
Po přidání všeho do souboru stiskněte Ctrl + O pro uložení v editoru nano.
Spouštění příkazů po probuzení

Provedení příkazu po obnovení z režimu spánku probíhá obdobně, jako spuštění příkazu před uspáním. Jediný rozdíl spočívá v tom, že místo přidání příkazu do "if" bloku, se nejdůležitější kód vkládá za řádek "elif".
Pro vytvoření skriptu pro obnovení, začněte přidáním shebangu jako prvního řádku:
#!bin/bash
Na další řádek vložte sekci "if".
if [ "${1}" == "pre" ]; then
# zde nic nevkládejte
S tímto kódem vloženým do bash skriptu se posuňte dolů a vložte "else if" část:
elif [ "${1}" == "post" ]; then
sh /cesta/k/skriptu/ktery/se/ma/spustit.sh
fi
Stejně jako dříve, je možné pod řádek "elif" vložit jakýkoliv příkaz, který má systemd a bash vykonat.
Spouštění příkazů při uspání i obnovení

Je možné spustit dva protichůdné příkazy: jeden před uspáním a jeden po probuzení. To vyžaduje pouze úpravu skriptu a přidání řádků pod "if" i pod "elseif".
Začněte standardně přidáním shebangu do skriptu:
#!/bin/bash
Dále vložte "if" sekci kódu:
if [ "${1}" == "pre" ]; then
# nahradte příkazem
V sekci "if" nahraďte # nahradte příkazem libovolným příkazem, který chcete spustit těsně před přechodem do režimu spánku. Následně přejděte do sekce "elif" a proveďte to samé:
elif [ "${1}" == "post" ]; then
# nahradte příkazem
fi
Soubor uložte pomocí Ctrl + O.
Aktualizace oprávnění a spuštění skriptu
Všechny potřebné příkazy jsou již ve skriptu, ale před jeho použitím je třeba aktualizovat oprávnění. Otevřete terminál a získejte root přístup pomocí su nebo sudo -s. Poté proveďte:
chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh
Od této chvíle by se při každém uspání a probuzení měly spouštět vlastní příkazy, které jste definovali ve skriptu.
Poznámka: Máte dotazy týkající se uspávání systému pomocí systemd? Podívejte se do manuálu pomocí příkazu man systemd-suspend.service.