Най-добрият начин да изпълнявате скриптове и команди при спиране и възобновяване на Linux преди спиране (или след възобновяване) е да използвате системата systemd init. Това се дължи на факта, че системата init взаимодейства директно с ядрото и захранващите системи. Да се научите да работите с този инструмент ще позволи на всеки потребител да получи много контрол върху своята операционна система Linux,
Моля, имайте предвид, че бъркането в системата за инициализиране на вашия компютър може да бъде опасно, ако не знаете какво правите. Не забравяйте да следвате инструкциите в този урок възможно най-точно, за да избегнете евентуални злополуки.
Не всяка модерна дистрибуция на Linux поддържа системата systemd init. Някои използват upstart или нещо съвсем друго. В този урок ще се съсредоточим върху systemd, тъй като това е най-често срещаната система за иницииране. Ако искате да изпълните тази задача на нещо, което не работи това, което разглеждаме в тази статия, помислете да разгледате ръководството на вашата операционна система за инструкции.
Забележка: Потребителите на Debian трябва да заменят всички екземпляри на usr/lib/systemd/system-sleep с /lib/systemd/system-sleep/
Съдържание
Изпълнение на команда преди спиране
За да стартирате скрипт преди спиране, поставете всеки файл на bash скрипт в директорията /usr/lib/systemd/system-sleep/. Самите скриптове могат да правят всичко, но има определен синтаксис, който трябва да се спазва. Започнете, като отворите прозорец на терминала. Използвайки sudo -s, спечелете root обвивка.
След това отворете нано текстовия редактор в системната директория за заспиване:
nano /usr/lib/systemd/system-sleep/pre-suspend.sh
Добавете shebang в началото на скрипта. Добавянето на това е критично и без него интерпретаторът няма да може да прочете правилно кода и командите.
#!/bin/bash/
Следващата част от скрипта е „ако“. Това ще каже на системата за контрол на мощността, че „ако“ системата е на път да спре да спре, нещо трябва да се случи. Поставете кода по-долу:
if [ "${1}" == "pre" ]; then sh /path/to/script/to/run.sh
Променете sh /path/to/script/to/run.sh в скрипта на това, което искате да стартирате на вашия Linux компютър (или сървър) точно преди системата да спре за спиране. Имайте предвид, че редът директно след „if“ не трябва да бъде sh /path/to/script/to/run.sh. Можете също да използвате това за изпълнение на различни команди. Докато bash може да го разпознае като команда, той ще работи.
Последната част от скрипта „преди спиране“ е да добавите частта „иначе ако“. Този аспект на скрипта не е необходимо да се променя, тъй като в този пример се притесняваме да направим нещо, преди системата да изпадне, а не когато се събуди отново.
elif [ "${1}" == "post" ]; then # nothing goes here fi
Когато всичко е добавено към файла, натиснете Ctrl + O, за да запазите nano.
Изпълнение на команда след възобновяване
Изпълнението на команда след възобновяване работи много като стартиране на нещо преди спиране. Единствената реална разлика е вместо да добавяте команда след частта „if“ на скрипта, ще накарате най-важната част от кода да се появи след реда „elif“.
За да направите скрипт след автобиография, първо добавете shebang като първи ред.
#!bin/bash
На следващия ред добавете частта „if“ от скрипта.
if [ "${1}" == "pre" ]; then # nothing goes here
С този къс код, поставен в bash скрипта, преместете се надолу и поставете секцията „else if“.
elif [ "${1}" == "post" ]; then sh /path/to/script/to/run.sh fi
Още веднъж е добре да напишете каквото и да е под реда „elif“. Докато това е нормална командна операция, systemd и bash ще я стартира.
Изпълнение на команди при стартиране и възобновяване
Ако искате да изпълните две противоположни команди; един преди спиране и един при възобновяване, възможно е. Това просто означава персонализиране на скрипта и добавяне на редове както под реда „if“, така и под реда „elseif“.
Както обикновено, започнете, като публикувате shebang в скрипта за преводача.
#!/bin/bash
След това поставете секцията if от кода.
if [ "${1}" == "pre" ]; then # replace with command
Под if заменете „# заменете с команда“ с каквато и да е команда, която искате да изпълните точно преди системата да изпадне. След това преминете към секцията „elif“ и направете същото.
elif [ "${1}" == "post" ]; then # replace with command fi
Запазете файла с Ctrl + O,
Актуализиране на разрешенията и използване на скрипта
Всички необходими команди са вътре във файла на скрипта, но преди да може да се изпълни, ще трябва да актуализирате разрешенията. Отворете терминал и спечелете root с: su или sudo -s. След това направете:
chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh
Оттук нататък, когато спрете или възобновите, персонализираните команди вътре в скрипта трябва да се изпълняват.
Забележка: имате въпроси относно системния сън на systemd? Проверете ръководството с man systemd-suspend.service.