41

Можно ли предоставить моему сервису systemd более одного аргумента?

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

Например: ./program arg1 arg2

Чтобы запустить приложение с одним аргументом, мне нужно что-то вроде systemctl start arg1@program , где в определении сервиса у меня есть ExecStart = /usr/bin/program ℅i .

Спасибо!

2 ответа2

29

Да, ты можешь! Определите их в файле где-нибудь и добавьте их в EnvironmentFile в вашей службе systemd. Например, скажите, что содержимое /etc/.progconf:

ARG1=-o
ARG2=--verbose

И ваш файл .service:

EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2

Вы можете написать в этот файл, если вам нужно изменить их на ходу. Служба не должна часто менять свои параметры, возможно, стоит подумать об автозапуске или cron, если вам нужно это сделать.

Для дополнительных примеров проверьте: https://wiki.archlinux.org/index.php/Systemd/Services

10

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

Я сделал сервис с именем файла argtest@.service (обратите внимание на конечный знак «at sign», который требуется, когда сервис принимает аргументы).

[Unit]
Description=Test passing multiple arguments

[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS

Я запускаю это с помощью sudo systemctl start argtest@"arg1 arg2 arg3".service и он передает arg1 , arg2 и arg3 качестве отдельных аргументов командной строки в test.py.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .