Systemd: Параметры сервисного файла

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

Данный раздел содержит общую информацию о юните, не зависящую от его типа.

Description

Краткое название юнита, используемое различными пользовательскими интерфейсами. Желательно, чтобы оно было именем существительным.

Documentation

Список URL, ссылающихся на документацию для данного юнита.

Wants

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

Requires

Схоже с Wants, за исключением более сильной зависимости — текущий юнит будет остановлен, если один из указанных будет остановлен.

PartOf

Зависимости аналогичны Requires. При остановке или перезапуске перечисленных юнитов при помощи systemd действие распространяется и на текущий юнит. При этом зависимость не имеет обратной силы.

Before

Текущий юнит будет запущен перед запуском указанных.

After

Текущий юнит будет запущен после запуска указанных.

StartLimitIntervalSec=interval, StartLimitBurst=burst

Ограничение количества успешных запусков юнита за указанный период времени. Для обнуления ограничения необходимо использовать команду systemctl reset-failed.

Данный раздел определяет юнит как сервисный файл и содержит необходимую для его работы информацию.

Type

Задаёт тип запуска команды сервисного файла. Исходя из того, как ведёт себя команда при ручном запуске из терминала, необходимо выбрать одно из значений:

  • simple (значение по умолчанию) — systemd будет считать юнит запущенным сразу после того, как основной процесс службы будет разветвлён на несколько процессов. При этом systemctl start будет сообщать об успешном запуске, даже если сервисный файл запустился неуспешно (например, потому что указанный пользователь не существует или файл службы отсутствует). Следует использовать с непрерывной командой, когда для получения доступа к терминалу необходимо прервать её выполнение, например, сочетанием клавиш Ctrl + C;
  • exec (отсутствует в старых версиях systemd) — аналогичен simple за исключением того, что systemd будет считать юнит успешно запущенным только после успешного запуска сервисного файла;
  • forking — ожидается, что основной процесс запустит фоновый и завершится. При этом дочерний процесс продолжит выполняться как основной процесс службы. Следует использовать, если команда запускает фоновый процесс и завершается после этого;
  • oneshot — поведение аналогично simple, однако systemd будет считать юнит завершённым после завершения основного процесса. Следует использовать, если команда выполняется и через небольшой промежуток времени завершается, например запускает какой-либо скрипт.

User

Устанавливает пользователя, от имени которого выполняются процессы. Принимает в качестве аргумента одно имя пользователя или числовой идентификатор. По умолчанию используется User=root.

Group

Устанавливает группу, от имени которой выполняются процессы. Принимает в качестве аргумента одно имя группы или числовой идентификатор. По умолчанию используется группа пользователя по умолчанию.

Environment

Задаёт переменные окружения для выполняемых процессов. Если необходимо присвоить переменной значение, содержащее пробелы или знак равенства, необходимо поставить кавычки вокруг всего присваиваемого значения. Символ $ не имеет специального значения.

Нежелательно использовать для передачи секретных значений (пароли и т. п.)

Два примера ниже зададут переменные VAR1, VAR2 и VAR3 со значениями word1 word2, word3 и $word 5 6 соответственно.

# В виде одного параметра
Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"
# В виде нескольких параметров
Environment="VAR1=word1 word2"
Environment=VAR2=word3
Environment="VAR3=$word 5 6"

EnvironmentFile

Аналогично Environment, однако считывает переменные окружения из текстового файла.

Правила:

  • Каждая переменная начинается с новой строки;
  • Пустые строки, строки без = или строки, начинающиеся с ; или #, будут проигнорированы, поэтому могут быть использованы для комментирования;
  • Строка, заканчивающаяся \, будет склеена со следующей;
  • Пробелы в начале и в конце значений удаляются, если не используются двойные кавычки;
  • В значениях можно использовать табуляцию \t и переход на новую строку \n.

WorkingDirectory

Абсолютный путь до директории, из которой выполняются процессы. Если задано значение ~, то используется домашний каталог пользователя, указанного в User. Если значение не задано, то по умолчанию используется корневой каталог, если systemd запущен как экземпляр системы, и домашний каталог соответствующего пользователя, если запущен от имени пользователя.

ExecStart

Запускаемая сервисным файлом команда, только при Type=oneshot может быть несколько команд. Желательно использовать абсолютный путь к исполняемому файлу (можно узнать командой which COMMAND).

ExecStartPre

Дополнительные команды, которые выполняются до ExecStart. Допускается использование нескольких команд или нескольких параметров ExecStartPre, при этом команды выполняются последовательно. Команды в ExecStart выполняются только после успешного завершения всех команд ExecStartPre. Для игнорирования неуспешного запуска перед командой необходимо добавить префикс -.

ExecReload

Команда, которую необходимо выполнить, чтобы вызвать перезагрузку службы, вызванной при помощи ExecStart. В параметре установлена переменная $MAINPID, указывающая на PID главного процесса, и может использоваться в командах типа:

ExecReload=/bin/kill -HUP $MAINPID

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

ExecStop

Команда, которую необходимо выполнить, чтобы вызвать остановку службы, вызванной при помощи ExecStart. После её выполнения подразумевается, что служба и все дочерние процессы остановлены. В параметре установлена переменная $MAINPID, указывающая на PID главного процесса, однако она будет пустой в случае, если главный процесс уже завершён.

Данная команда также выполняется при перезагрузке службы командой systemctl restart.

Restart

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

Принимает одно из значений (по умолчанию no):

RestartSec

Время ожидания перед повторным запуском службы. Примеры использования:

RestartSec=10
RestartSec="1min 10s"

Limit…

Установка мягких и жестких ограничений на различные ресурсы для выполняемых процессов, эквивалентных установленным командой ulimit.

Все возможные параметры с их описанием:

Ограничения могут быть заданы в двух форматах:

  • Как единое значение, устанавливающий одновременно мягкий и жесткий лимит на одно и то же значение;
  • Как пара soft:hard, разделенная двоеточием, чтобы установить оба лимита по отдельности. Например LimitAS=4G:16G.

Данный раздел содержит информацию для установки юнита. Его содержимое активируется/деактивируется при выполнении команд systemctl enable/disable.

Alias

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

Например, если при создании сервиса с названием hello.service задать параметр:

Alias=hi.service

А затем, активировать раздел командой systemctl enable, то название hi.service будет эквивалентно названию hello.service.

WantedBy

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

RequiredBy

Схоже с WantedBy, за исключением более сильной зависимости — если текущий юнит будет остановлен, то указанные будут также остановлены

Also

При использовании system enable/disable на текущем юните, действие распространится на указанные