Поиск по сайту:
Чтобы вести войну, нужны три вещи: деньги, деньги и еще раз деньги (Людовик XII).

Как создать пользовательскую службу Systemd в Linux

13.02.2025
5 лучших плагинов для повышения производительности для Tmux

Systemd — это мощная и универсальная система инициализации для дистрибутивов Linux. Она может запускать программы, управлять системными ресурсами и даже контролировать состояние вашего компьютера. В этой статье мы покажем, как можно использовать Systemd для управления приложениями, создав пользовательскую службу в Ubuntu.

 

Что такое сервисный модуль Systemd?

Сервисный модуль — это обычный файл, содержащий сведения о том, как запустить конкретное приложение. Он включает в себя общие метаданные программы, сведения о том, как её запустить, и о том, может ли Systemd получить к ней доступ в обычном сеансе.

По умолчанию каждый демон на компьютере, работающем на базе Systemd, имеет файл службы в той или иной форме. Например, OpenSSH использует модуль ssh.service в «/etc/systemd/system/», чтобы определить, как он будет работать в Debian и Ubuntu.

На базовом уровне файл служебного модуля состоит из трёх частей: категорий «Unit», «Service» и «Install». Раздел Unit содержит метаданные приложения и его зависимости. Раздел Service определяет, где находится приложение и как Systemd будет его запускать. Наконец, в разделе Install описывается, когда Systemd может запустить приложение.

 

Создание пользовательской службы Systemd системного уровня

Одно из наиболее распространённых применений пользовательских служб — автоматизация команд, требующих прав суперпользователя, или использование преимуществ таймеров Systemd. Например, пользовательская служба помогает обеспечить корректный запуск сервера Minecraft после перезагрузки.

Чтобы создать пользовательскую службу системного уровня в Linux, начните с создания файла модуля Systemd в домашнем каталоге вашего пользователя:

nano ~/my-system-app.service

 

Вставьте следующий блок кода в свой новый файл конфигурации. Это самая простая допустимая конфигурация для службы Systemd:

[Unit]
Description=My First Service
After=network.target
 
[Service]
Type=simple
ExecStart=/path/to/bin
Restart=always
 
[Install]
WantedBy=multi-user.target

 

Замените переменную «Description» на сведения о вашей услуге на уровне пользователя.

Замените переменную «ExecStart» на полный путь к программе, которую вы хотите запустить.

Читать  Сделайте текст вашего терминала Linux радужным с помощью одной этой команды

Сохраните новый файл, а затем скопируйте его в каталог служб вашего компьютера:

cp sudo ./my-system-app.service /etc/systemd/system/

 

Выполните следующую команду, чтобы перезапустить демон Systemd:

sudo systemctl daemon-reload

 

Протестируйте свою новую службу системного уровня, выполнив следующую команду:

sudo systemctl start my-system-app.service

 

Наконец, убедитесь, что ваш новый сервис работает правильно, проверив его статус в systemctl:

systemctl status my-system-app.service

 

Создание пользовательской службы Systemd на уровне пользователя

Сервисные модули не ограничиваются приложениями системного уровня или суперпользователями. С помощью Systemd-user можно создавать сервисы без прав суперпользователя. Это позволяет пользователям без прав суперпользователя управлять локальными приложениями и повышать безопасность своего ПК, ограничивая программы с правами суперпользователя.

Чтобы создать пользовательскую службу в Linux, создайте новый файл модуля Systemd в домашнем каталоге пользователя:

nano ~/my-user-app.service

 

Вставьте следующий блок кода в ваш новый модульный файл:

[Unit]
Description=My First User Service
After=graphical-session.target
 
[Service]
Type=simple
ExecStart=/path/to/bin
 
[Install]
WantedBy=default.target

 

Замените значение переменной «ExecStart» на путь к программе, которую вы хотите запустить. Поскольку это служба пользовательского уровня, убедитесь, что у вашей учётной записи есть доступ к исполняемому файлу.

Сохраните новый файл службы на уровне пользователя, затем создайте локальный каталог Systemd для своего пользователя:

mkdir -p ~/.config/systemd/user/

 

Скопируйте новый файл службы пользовательского уровня в локальный каталог Systemd для вашего пользователя:

cp ./my-user-app.service ~/.config/systemd/user/

 

Убедитесь, что Systemd проверяет ваш пользовательский каталог на наличие новых файлов service unit:

systemctl daemon-reload --user

 

Наконец, убедитесь, что ваш новый сервис работает правильно, проверив его статус в systemctl:

systemctl --user status my-user-app.service

 

Полезно знать: Systemd — это не просто система инициализации. Узнайте, как работает родственная ей программа: Systemd-boot в сравнении с популярным GRUB.

Читать  Экспорт переменных в Bash

 

Настройка вашей пользовательской службы Systemd

Одним из основных преимуществ Systemd является то, что он позволяет полностью настраивать запуск программ и управление ими.

 

Добавление переменных окружения в пользовательский сервис

Переменные среды — важная часть любой системы Linux. Они предоставляют программе дополнительные данные без необходимости возиться с файлами конфигурации. С помощью Systemd можно использовать переменные среды, включив их в свои служебные модули.

Начните с отключения службы, которую вы хотите изменить:

systemctl --user disable --now my-user-app.service

 

Откройте свой пользовательский служебный файл с помощью вашего любимого текстового редактора:

sudo nano ~/.config/systemd/user/my-user-app.service

 

Перейдите в раздел «[Сервис]» и добавьте следующую строку кода чуть ниже переменной «Type=»:

Environment=""

 

Добавьте переменную среды, которую вы хотите добавить в свой пользовательский сервис. В нашем случае мы хотим добавить переменную EDITOR, чтобы наш сервис мог видеть наш экземпляр Vim.

Сохраните изменённый файл службы, а затем перезапустите демон Systemd, чтобы применить изменения.

destroyer@andreyex: -$ nano ~/.config/systemd/user/my-user-app.service
destroyer@andreyex: $ systemctl daemon-reload --user

 

Перезапустите вашу новую службу Systemd, чтобы использовать вашу новую переменную окружения:

systemd --user start my-user-app.service

 

Ограничение пользовательского сервиса конкретным пользователем

Помимо файлов модулей пользовательского уровня, вы также можете настроить службу системного уровня для запуска от имени конкретного пользователя. Это полезно, если вы хотите запустить приложение от имени пользователя без прав суперпользователя и без оболочки.

Чтобы привязать службу Systemd к пользователю, сначала полностью отключите свой пользовательский модуль.

destroyer@andreyex: $ sudo systemctl disable --now my-system-app.service

 

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

destroyer@andreyex: -$ echo $USER
destroyer@andreyex: $ sudo -s root@andreyex:/home/destroyer# su minecraft 
$ echo $USER

 

Откройте служебный файл системного уровня с помощью вашего любимого текстового редактора:

sudo nano /etc/systemd/system/my-system-app.service

 

Читать  Примеры команды cut в linux

Прокрутите вниз до раздела «[Сервис]», затем добавьте переменную «User=», а затем имя вашей учётной записи.

 

Примечание: вы также можете указать группу для своего сервиса, добавив «Group=» под переменной «User».

Сохраните изменения в файле вашего устройства, затем перезапустите службу:

sudo systemctl start my-system-app.service

 

Убедитесь, что ваш сервис теперь работает от имени вашего пользователя, выполнив следующую команду:

ps -o user= -p $(systemctl show my-system-app.service -p MainPID | awk -F= '{print $2}')

 

Ограничение потребления ресурсов Сервисной единицей

Помимо настройки переменных среды и пользователей, Systemd может ограничивать ресурсы, которые приложение может потреблять в течение своего жизненного цикла. Хотя по умолчанию это не делается, можно контролировать основные параметры, такие как загрузка процессора и общее количество процессов.

Начните с полного отключения службы, которую вы хотите настроить.

destroyer@andreyex:~$ sudo systemctl disable --now my-app.service
destroyer@andreyex:~$ sudo systemctl status my-system-app.service

 

Откройте файл service unit с помощью вашего любимого текстового редактора:

sudo nano /etc/systemd/system/my-system-app.service

 

Прокрутите вниз до раздела «[Service]» и добавьте имя переменной для ресурса, который вы хотите ограничить. Например, добавление переменной «MemoryHigh=» позволяет установить мягкое ограничение памяти для этой службы.

 

Совет: вы можете найти список допустимых переменных, выполнив следующую команду  в терминале:

 man systemd.resource-control

 

Сохраните файл unit, затем перезагрузите службу Systemd:

sudo systemctl enable --now my-system-app.service

 

Наконец, вы можете отслеживать свои запущенные службы, запустив systemd-cgtop.

 

Изучение того, как создавать собственные службы Systemd и изменять их в соответствии с вашими потребностями, — это лишь первый шаг к пониманию этого очень универсального инструмента.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
В этой статье мы объясним, что такое ошибка ERR_CONNECTION_RESET и…

Спасибо!

Теперь редакторы в курсе.