Як запустити скрипти та команди під час призупинення та відновлення в Linux

Найефективніший підхід для виконання скриптів і команд під час переходу в режим сну та відновлення в Linux, а саме до призупинення або після відновлення, – це використання системи ініціалізації systemd. Це зумовлено її прямим зв’язком з ядром і системами управління живленням. Освоєння цього інструменту надасть користувачам значний контроль над їхньою операційною системою Linux.

Варто пам’ятати, що втручання в роботу системи ініціалізації на вашому комп’ютері може бути ризикованим, якщо ви не маєте достатніх знань. Тому ретельно дотримуйтесь інструкцій цього посібника, щоб уникнути небажаних наслідків.

Не всі сучасні дистрибутиви Linux використовують систему ініціалізації systemd. Деякі можуть покладатися на Upstart або інші альтернативи. Цей посібник зосереджений саме на systemd, оскільки це найбільш поширена система ініціалізації. Якщо ви використовуєте іншу систему, зверніться до документації вашої операційної системи.

Примітка: Користувачам Debian потрібно замінити всі згадки usr/lib/systemd/system-sleep на /lib/systemd/system-sleep/.

Виконання команди перед переходом у сплячий режим

Для того, щоб запустити скрипт безпосередньо перед призупиненням роботи, розмістіть будь-який bash-скрипт у директорії /usr/lib/systemd/system-sleep/. Ці скрипти можуть виконувати різноманітні дії, але є певний синтаксис, якого слід дотримуватися. Розпочніть з відкриття терміналу і отримання прав root за допомогою команди sudo -s.

Далі перейдіть до текстового редактора nano в каталозі системного сну:

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

Додайте shebang на початок скрипту. Це необхідно для правильної інтерпретації коду.

#!/bin/bash/

Наступна частина скрипту – це умовна конструкція “if”. Вона повідомляє системі керування живленням, що коли система збирається призупинити роботу, потрібно виконати певні дії. Вставте наступний код:

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

Змініть sh /path/to/script/to/run.sh на шлях до вашого скрипту або команду, яку ви бажаєте виконати перед переходом системи в режим сну. Важливо пам’ятати, що замість sh /path/to/script/to/run.sh ви можете використати будь-яку команду, яку може розпізнати bash.

Остання частина скрипту “перед призупиненням” – це додавання розділу “elif”. Цей розділ можна залишити без змін, оскільки у цьому випадку нас цікавить лише виконання дій перед сном, а не після пробудження.

elif [ "${1}" == "post" ]; then
# нічого тут не виконується
fi

Збережіть файл, натиснувши Ctrl + O.

Виконання команди після відновлення

Виконання команд після відновлення відбувається аналогічно запуску команд перед призупиненням. Основна різниця полягає в тому, що код для виконання після відновлення потрібно розмістити після рядка “elif”.

Для створення скрипту після відновлення, спочатку додайте shebang як перший рядок:

#!bin/bash

У наступному рядку додайте умовну конструкцію “if”:

if [ "${1}" == "pre" ]; then
# нічого тут не виконується

Далі вставте розділ “else if”:

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

Як і раніше, під рядком “elif” можна розмістити будь-яку команду, яку systemd та bash можуть виконати.

Виконання команд при запуску та відновленні

Якщо вам потрібно запустити дві різні команди – одну перед призупиненням, а іншу після відновлення – вам потрібно лише налаштувати скрипт і додати відповідні рядки під розділами “if” та “elif”.

Як зазвичай, почніть зі вставки shebang у скрипт:

#!/bin/bash

Потім вставте розділ “if”:

if [ "${1}" == "pre" ]; then
# замінити на команду

У розділі “if” замініть # замінити на команду на команду, яку ви хочете виконати перед переходом системи в режим сну. Потім перейдіть до розділу “elif” і зробіть те саме:

elif [ "${1}" == "post" ]; then
#  замінити на команду
fi

Збережіть файл, натиснувши Ctrl + O.

Оновлення дозволів та використання скрипту

Усі необхідні команди вже в скрипті, але перш ніж він зможе виконуватися, потрібно оновити дозволи. Відкрийте термінал і отримайте права root за допомогою su або sudo -s. Потім виконайте:

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

Після цього, при кожному призупиненні або відновленні, ваші користувацькі команди повинні виконуватися.

Примітка: Якщо у вас є питання щодо системного сну systemd, перегляньте посібник за допомогою команди man systemd-suspend.service.