Службы в Linux запускаются, как только ваша система загружается или перезагружается. Вот как вы можете создать автозапускающуюся службу systemd на вашем ПК с Linux.
systemd — это менеджер служб для многих известных дистрибутивов Linux. Служба — это часть программы, которая обычно работает в фоновом режиме. Службы по своей природе автоматически запускаются при загрузке системы и могут работать без присмотра.
Если вам нужно создать автоматически запускаемую задачу или программу, которая выполняется каждый раз, когда вы загружаете или перезагружаете систему, вы можете подумать о создании новой службы. Давайте узнаем, как создать новую пользовательскую службу systemd в Linux.
Шаг 1: Создание служебного файла
Для создания нового файла службы systemd необходимо выполнить несколько шагов. Первый из них — создание юнит-файла для сервиса. Прежде чем создавать служебный файл, необходимо понять его структуру.
Давайте изучим служебный файл, извлекая реальный работающий служебный файл из вашей системы Linux. Ниже вы можете увидеть служебный файл для службы демона vmtools.
Эта конкретная служба может отсутствовать в вашей системе, если только вы не используете Linux на VMware с установленными инструментами VMware. Рассматриваемый сервис не важен, потому что все сервисы, а точнее файлы юнитов сервисов, имеют одинаковую базовую структуру с некоторыми настройками по мере необходимости.
Все служебные файлы systemd должны иметь три раздела: [Услуга], [Единица], и [Установить]и несколько параметров в каждом разделе. Вот что содержит каждый раздел и почему они важны:
1. Единица
Единица Раздел включает важные метаданные, такие как описание и зависимости службы. Он имеет три параметра: Описание, До, и После. Как это же предполагает, Описание Параметр предоставляет некоторый контекст службы и то, что она делает.
До и После параметры определяют условия, которые должны быть выполнены для выполнения службы. Например, если вы запускаете службу веб-сервера, вы хотите, чтобы она запускалась только после того, как сетевая служба будет подключена к сети. Таким образом, вы должны установить значение После параметр для сетевой службы.
2. Услуга
Услуга содержит два обязательных параметра: ExecStart, Типи несколько других необязательных параметров, таких как ExecReload, и более.
ExecStart определяет команду, которая будет выполняться при запуске службы, тогда как Тип Параметр определяет тип запускаемого процесса.
3. Установить
Этот раздел и его данные вызываются всякий раз, когда вы включаете или отключаете службу с помощью команда systemctl.
У него есть пара параметров. Одним из распространенных и необходимых является WantedBy. WantedBy Параметр определяет целевые устройства, которые должны запускаться всякий раз, когда служба включена. Значение по умолчанию многопользовательская.цель.
Упомянутые здесь параметры — не единственные параметры, которые вы можете установить в юнит-файле. Вы можете получить полный список параметров из официальная документация systemd.exec или введя человек systemd.exec в терминале.
Файл сервисной единицы systemd всегда заканчивается символом ".услуга" и должен храниться в /etc/systemd/system/ каталог. Создайте файл службы с помощью сенсорной команды с повышенными привилегиями, поставив перед ним префикс судо команда:
sudo коснитесь /etc/systemd/система/.услуга
Теперь, когда вы создали файл службы, давайте наполним его необходимым синтаксисом, чтобы сделать службу действительной и работающей.
Шаг 2: Настройка служебного файла
Для демонстрации вы создадите пример службы, которая выполняет Nmap для сканирования портов на вашем компьютере и сохранять вывод в файл каждые тридцать секунд. Чтобы выполнить эту задачу, вот как структурировать файл сервисной единицы:
[Единица]
Description=Демонстрация пользовательского сервиса nmap.
После=network.target[Услуга]
Тип=простой
Пользователь=корень
ExecStart=/usr/bin/nmap -sS -O -oN /home//results.txt локальный хост
Перезапустить = всегда
Рестартсек=30
[Установить]
WantedBy=многопользовательская.цель
Хотя упомянутые здесь параметры были объяснены ранее, давайте рассмотрим, как они влияют на нашу недавно созданную службу, а также рассмотрим новые, представленные в этом модуле: Перезапуск, RestartSec, и Пользователь.
Вот что означают параметры в каждом разделе:
- Описание: Удобочитаемый текст для описания функций сервиса.
- После=сеть.цель: Диктовать systemd, что эта служба зависит от сеть.цель и должно начинаться только после сеть.цель служба запущена. Обратите внимание, что После не используется для установления каких-либо отношений прямой зависимости, он просто действует как триггер.
- Тип = простой: Существует несколько типов услуг. Однако обслуживание в этой демонстрации является обычным процессом, и поэтому мы объявляем его таковым. Вы можете найти все различные значения для этого на странице официальной документации, указанной ранее.
- Перезапускать = всегда: Это означает, что всякий раз, когда служба завершает работу, она всегда должна перезапускаться.
- Рестартсек=30: Это устанавливает интервал между каждым запуском службы равным 30 секундам.
- Пользователь=корень: Это определяет, что служба будет работать от имени пользователя root. В этом случае это обязательный шаг, так как Nmap не сможет работать без привилегий root.
- ExecStart: Эта директива содержит абсолютный путь к программе, которая должна быть выполнена, а также все необходимые флаги или аргументы, необходимые для правильной работы программы.
- WantedBy=multi-user.target: Этот параметр в файле службы указывает, какая цель должна включать или «захотеть» службу. Когда служба включена в цель, это означает, что служба должна запускаться, когда система достигает этой цели в процессе загрузки. В этом случае служба должна запускаться при переходе системы в многопользовательский режим. Многопользовательский режим — это состояние, при котором система полностью загружена и позволяет нескольким пользователям входить в систему и использовать систему.
Шаг 3: Включение и запуск службы
Теперь, когда вы создали юнит-файл, для активации службы осталось только включить и запустить ее. Вы можете включить и запустить службу с помощью команды systemctl.
Вот как использовать systemctl для включения, запуска и проверки состояния вашей службы:
sudo systemctl включить .услуга
запуск sudo systemctl .услуга
статус sudo systemctl .услуга
Теперь ваш пользовательский сервис должен быть запущен и работать! В этом случае вы должны увидеть, как сканирование Nmap выполняется каждые тридцать секунд, а результат сохраняется в результаты.txt файл в домашнем каталоге.
Настроить службу systemd в Linux очень просто!
Хотя настройка собственной службы с нуля поначалу может показаться сложной задачей, это довольно простой способ настроить самовыполняющийся автоматический процесс для выполнения повторяющихся задач за вас и повышения вашего производительность.
В демонстрационном сервисе мы едва коснулись того, как можно сконфигурировать и настроить сервис. Чтобы узнать все о том, как настроить службу, рекомендуется ознакомиться с официальной документацией, ссылка на которую приведена в примечании.
Если настройка и обслуживание службы кажется вам слишком сложной задачей, рассмотрите альтернативный способ автоматизации повторяющихся задач в Linux.