Systemd - скрипт для включения и выключения юнита одной командой
В статье представлен образец скрипта, чтобы включать или выключать systemd unit одной командой.
188 Words
2025-01-18 13:31 +0300
Допустим, у вас есть OpenVPN соединение с работой (systemd-unit [email protected]), и вы хотите включать
или выключать его одной командой:
$ connect_work
Для этого можно написать такой скрипт (и разместить его, допустим, в /usr/bin/connect_work):
#!/usr/bin/env bash
set -e
service="[email protected]"
if (systemctl -q is-active "$service") then
echo "Stopping $service..."
sudo systemctl stop "$service"
else
echo "Starting $service..."
sudo systemctl start "$service"
fi
systemctl status "$service"
Чтобы sudo не спрашивало постоянно пароль для эскалации прав, пользователю можно разрешить выполнять эти команды
без запроса пароля, создав файл в /etc/sudoers.d/vpn с таким содержанием.
%vodolaz095 ALL=NOPASSWD: /usr/bin/systemctl start [email protected], /usr/bin/systemctl stop [email protected], /usr/bin/systemctl restart [email protected]
Тут:
%vodolaz095- группа пользователя, которому можно совершать данные действияALL=NOPASSWD:выключает проверку пароля при вызове sudo для этих команд/usr/bin/systemctl start [email protected], ...- список комманд, которые может вводить пользователь с эскалацией прав
Совет - файл можно создать любым текстовым редактором, но лучше всего использовать visudo - оно проверяет корректность синтаксиса.
Создать разрешения для использования vpn можно этой командой
$ sudo visudo /etc/sudoers.d/vpn
Как итог, любой пользователь из группы vodolaz095 может вызвать команду $ connect_work и включить или выключить
systemd юнит [email protected].
Образец скрипта также опубликован тут: https://gist.github.com/vodolaz095/484efe4fbd385185d50c0e454d32eabe