Как создать новую службу systemd в Linux
Службы в Linux запускаются сразу после запуска или перезагрузки системы. Вот как вы можете создать службу автозапуска systemd на вашем ПК с Linux.
systemd — это менеджер служб для многих известных дистрибутивов Linux. Служба — это часть программы, которая обычно работает в фоновом режиме. Службы по своей природе запускаются автоматически при загрузке системы и могут работать без присмотра.
Если вам нужно создать автоматически запускаемую задачу или программу, которая запускается при каждом запуске или перезапуске системы, рассмотрите возможность создания новой службы. Давайте узнаем, как создать новую пользовательскую службу systemd в Linux.
Шаг 1: Создание служебного файла
Создание нового файла службы systemd требует нескольких шагов. Первый — создать файл модуля для службы. Перед созданием служебного файла необходимо понять его структуру.
Давайте изучим служебный файл, извлекая реальный работающий служебный файл из системы Linux. Ниже вы можете увидеть служебный файл для службы демона vmtools.
Эта конкретная служба может отсутствовать в вашей системе, если только вы не используете Linux на VMware с установленными инструментами VMware. Рассматриваемый сервис не важен, так как все сервисы, а точнее файлы юнитов сервисов, имеют одинаковую базовую структуру с некоторыми необходимыми настройками.
Все служебные файлы systemd должны содержать три раздела: [Service], [Unit] и [Install], а также несколько параметров в каждом разделе. Вот что содержит каждый раздел и почему они важны:
1. Единица измерения
Раздел модуля содержит важные метаданные, такие как описание и зависимости службы. Он имеет три параметра: Описание, До и После. Как следствие того же, параметр описания предоставляет некоторый контекст для службы и того, что она делает.
Параметры «До» и «После» определяют условия, которые должны быть выполнены для запуска службы. Например, если вы запускаете службу веб-сервера, вы хотите, чтобы она запускалась только после того, как сетевая служба будет подключена к сети. Итак, вы хотите установить значение параметра After для сетевой службы.
2. Обслуживание
Раздел Service содержит два обязательных параметра: ExecStart, Type и несколько других необязательных параметров, таких как ExecReload и другие.
ExecStart указывает команду, которая должна выполняться при запуске службы, а параметр Type указывает тип запускаемого процесса.
3. Установите
Этот раздел и содержащиеся в нем данные вызываются, когда вы включаете или отключаете службу с помощью команды systemctl.
У него есть несколько вариантов. Обычный и нужный — WantedBy. Параметр WantedBy указывает целевые модули, которые должны запускаться при включении службы. Значение по умолчанию — multi-user.target.
Упомянутые здесь параметры — не единственные параметры, которые можно установить в устройстве. Вы можете получить полный список опций из официальной документации systemd.exec или набрав man systemd.exec в терминале.
Файл сервисного модуля systemd всегда заканчивается расширением .service и должен храниться в каталоге /etc/systemd/system/. Создайте служебный файл с помощью команды touch с повышенными правами и добавьте в него команду sudo:
sudo touch /etc/systemd/system/.service
Теперь, когда вы создали файл службы, да[Unit]
Description=Demonstration of custom nmap service.
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/nmap -sS -O -oN /home/<user>/results.txt localhost
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.targetвайте начнем заполнять его необходимым синтаксисом, чтобы запустить службу.
Шаг 2: Настройка служебного файла
Для демонстрации вы создадите пример службы, которая запускает Nmap для сканирования портов на вашем компьютере и сохранения результатов в файл каждые тридцать секунд. Для выполнения этой задачи вы можете структурировать файл сервисного модуля здесь:
[Unit]
Description=Demonstration of custom nmap service.
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/nmap -sS -O -oN /home/<user>/results.txt localhost
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target[Unit]
Description=Demonstration of custom nmap service.
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/nmap -sS -O -oN /home/<user>/results.txt localhost
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
Хотя параметры, упомянутые здесь, были объяснены ранее, давайте посмотрим, как они влияют на нашу недавно созданную службу, а также на новые, представленные в этом разделе: Restart, RestartSec и User.
Вот что означают параметры в каждом разделе:
- Описание: Удобочитаемый текст для описания функциональности сервиса.
- After=network.target: Сообщает systemd, что эта служба зависит от network.target и должна запускаться только после запуска службы network.target. Обратите внимание, что After не используется для установления какой-либо прямой зависимости, он действует только как триггер.
- Type=simple: Существует несколько типов услуг. Тем не менее, техническое обслуживание в этой демонстрации является нормальным процессом, и именно поэтому мы указываем это. Вы можете найти все различные значения для этого на странице официальной документации, указанной ранее.
- Restart=always: Это означает, что когда служба завершается, ее всегда нужно перезапускать.
- RestartSec=30: устанавливает интервал между каждым перезапуском службы равным 30 секундам.
- User=root: указывает, что служба должна запускаться от имени пользователя root. В данном случае это обязательный шаг, так как Nmap не сможет работать без привилегий суперпользователя.
- ExecStart: эта директива содержит абсолютный путь к программе, которая должна быть выполнена, а также все необходимые флаги или аргументы для правильной работы программы.
- WantedBy=multi-user.target: этот параметр в файле службы указывает, какая цель должна разрешить или «захотеть» использовать службу. Когда служба включена в цель, это означает, что служба должна запускаться, когда система достигает этой цели в процессе запуска. В этом случае служба должна запускаться при переходе системы в многопользовательский режим. Многопользовательский режим — это состояние, при котором система полностью загружена и позволяет нескольким пользователям входить в систему и использовать ее.
Шаг 3: Включение и запуск службы
Теперь, когда вы создали файл модуля, осталось только включить службу, чтобы включить и запустить ее. Вы можете включить и запустить службу с помощью команды systemctl.
Вот как использовать systemctl для включения, запуска и проверки состояния вашей службы:
sudo systemctl enable <filename>.service
sudo systemctl start <filename>.service
sudo systemctl status <filename>.service
Теперь ваша служба пользователя должна работать! В этом случае вы должны увидеть, как сканирование Nmap запускается каждые тридцать секунд, а результат сохраняется в файле result.txt в вашем домашнем каталоге.
Настроить службу systemd в Linux очень просто!
Хотя настройка пользовательской службы с нуля поначалу может показаться сложной задачей, это довольно простой способ настроить самовыполняющийся автоматизированный процесс для выполнения повторяющихся задач и повышения производительности.
В демонстрационном сервисе мы едва коснулись того, как вы можете настроить сервис. Чтобы узнать все о том, как настроить службу, рекомендуется прочитать официальную документацию, ссылка на которую приведена в примечании.
Если настройка и обслуживание службы кажется вам слишком сложной задачей, рассмотрите альтернативный способ автоматизации повторяющихся задач в Linux.