Systemd: Параметры сервисного файла
Если в параметре можно использовать несколько значений, то они разделяются пробелами, при этом может использоваться одно значение.
[Unit]
Данный раздел содержит общую информацию о юните, не зависящую от его типа.
Description
Краткое название юнита, используемое различными пользовательскими интерфейсами. Желательно, чтобы оно было именем существительным.
Documentation
Список URL, ссылающихся на документацию для данного юнита.
Wants
Указанные в данном параметре юниты могут быть запущены после запуска текущего юнита. При этом, если какой-то из указанных юнитов будет остановлен, то текущий сможет запуститься. Это рекомендуемый тип связи юнитов.
Requires
Схоже с Wants
, за исключением более сильной зависимости — текущий юнит будет остановлен, если один из указанных будет остановлен.
PartOf
Зависимости аналогичны Requires
. При остановке или перезапуске перечисленных юнитов при помощи systemd
действие распространяется и на текущий юнит. При этом зависимость не имеет обратной силы.
Before
Текущий юнит будет запущен перед запуском указанных.
After
Текущий юнит будет запущен после запуска указанных.
StartLimitIntervalSec=interval, StartLimitBurst=burst
Ограничение количества успешных запусков юнита за указанный период времени. Для обнуления ограничения необходимо использовать команду systemctl reset-failed
.
[Service]
Данный раздел определяет юнит как сервисный файл и содержит необходимую для его работы информацию.
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
.
[Install]
Данный раздел содержит информацию для установки юнита. Его содержимое активируется/деактивируется при выполнении команд systemctl enable/disable
.
Alias
Список дополнительных названий, которые можно будет использовать при управлении юнитом. Перечисленные названия должны иметь тот же тип, что и имя файла юнита (например .service)
Например, если при создании сервиса с названием hello.service
задать параметр:
Alias=hi.service
А затем, активировать раздел командой systemctl enable
, то название hi.service
будет эквивалентно названию hello.service
.
WantedBy
Текущий юнит может быть запущен после запуска указанных в данном параметре юнитов. При этом, если текущий юнит будет остановлен, то указанные смогут запуститься.
RequiredBy
Схоже с WantedBy, за исключением более сильной зависимости — если текущий юнит будет остановлен, то указанные будут также остановлены
Also
При использовании system enable/disable на текущем юните, действие распространится на указанные