Можно ли предоставить моему сервису systemd более одного аргумента?
Я хотел бы выполнить программу с несколькими аргументами, которые должны быть определены конечным пользователем.
Например: ./program arg1 arg2
Чтобы запустить приложение с одним аргументом, мне нужно что-то вроде того systemctl start arg1@program
, где в определении сервиса есть ExecStart = /usr/bin/program ℅i
.
Благодарность!
Ответы:
Да, ты можешь! Определите их в файле где-нибудь и добавьте
EnvironmentFile
в свою службу systemd. Например, скажите, что содержимое /etc/.progconf:И ваш файл .service:
Вы можете написать в этот файл, если вам нужно изменить их на ходу. Служба не должна менять свои параметры очень часто, возможно, стоит подумать об автозапуске или cron, если вам нужно это сделать.
Для дополнительных примеров проверьте: https://wiki.archlinux.org/index.php/Systemd/Services
источник
VAR1=... VAR2=... systemctl start foobar.service
передать переменные?PassEnvironment
директива, но она принимает переменную изsystemd
процесса (обычно PID 1), а не изsystemctl
. Переменные среды изsystemctl
процесса не распространяются на запускаемую службу.Я хотел сделать то же самое, но без отдельного файла для каждой комбинации аргументов. Я обнаружил, что могу передать один длинный аргумент с пробелами, а затем использовать функцию разделения пространства в systemd для разделения аргументов.
Я сделал сервис с именем файла
argtest@.service
( обратите внимание на конечный знак «at sign», который требуется, когда сервис принимает аргументы ).Я запускаю это с
sudo systemctl start argtest@"arg1 arg2 arg3".service
и он проходитarg1
,arg2
иarg3
как отдельные аргументы командной строки для test.py.источник
Wants=argtest@"arg1 arg2".service
и только первый аргумент был принят.Самый простой, который я нашел, это:
Сохраняет все это самодостаточным.
Сказав это, я обнаружил, что по крайней мере на Ubuntu 18.04 LTS мне даже не нужно этого делать, я могу это сделать, и он отлично работает:
$vars
работать как аргументы с этим шаблоном.источник