Найкращий спосіб запускати сценарії та команди під час призупинення та відновлення в Linux перед призупиненням (або після відновлення) — це використовувати систему ініціалізації systemd. Це пов’язано з тим, що система ініціалізації безпосередньо взаємодіє з ядром і системами живлення. Навчання працювати з цим інструментом дозволить будь-якому користувачеві отримати великий контроль над своєю операційною системою Linux,
Зрозумійте, що возитися з системою ініціалізації на вашому ПК може бути небезпечно, якщо ви не знаєте, що робите. Обов’язково дотримуйтесь інструкцій у цьому посібнику якомога точніше, щоб уникнути можливих невдач.
Не кожен сучасний дистрибутив Linux підтримує систему ініціалізації systemd. Деякі використовують вискочку або щось зовсім інше. У цьому підручнику ми зосередимося на systemd, оскільки це найпоширеніша система ініціації. Якщо ви хочете виконати це завдання на чомусь, що не відповідає тому, що ми розглядаємо в цій статті, розгляньте інструкції в посібнику вашої операційної системи.
Примітка: користувачі Debian повинні замінити всі екземпляри usr/lib/systemd/system-sleep на /lib/systemd/system-sleep/
Запуск команди перед призупиненням
Щоб запустити сценарій перед призупиненням, помістіть будь-який файл сценарію bash в каталог /usr/lib/systemd/system-sleep/. Самі скрипти можуть робити що завгодно, але є певний синтаксис, якого потрібно дотримуватися. Почніть з відкриття вікна терміналу. За допомогою sudo -s отримати кореневу оболонку.
Далі перейдіть до текстового редактора nano в каталозі системного сну:
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.