Jak spouštět skripty a příkazy při pozastavení a obnovení v systému Linux

Photo of author

By etechblogcz

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.