¡Sí tu puedes! Defínalos en un archivo en algún lugar y agréguelos a EnvironmentFile
en su servicio systemd. Por ejemplo, digamos que el contenido de /etc/.progconf es:
ARG1=-o
ARG2=--verbose
Y su archivo .service:
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
Puede escribir en ese archivo si necesita cambiarlos sobre la marcha. Un servicio no debería cambiar sus opciones muy a menudo, tal vez considere el inicio automático o cron si necesita lograr eso.
Para ver más ejemplos, consulte:https://wiki.archlinux.org/index.php/Systemd/Services
Quería hacer lo mismo, pero sin un archivo separado para cada combinación de argumentos. Descubrí que podía pasar un argumento largo con espacios y luego usar la función de división de espacios de variables de entorno de systemd para separar los argumentos.
Hice un servicio con nombre de archivo [email protected]
(tenga en cuenta la 'arroba' final que se requiere cuando un servicio toma argumentos ).
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
Ejecuto esto con sudo systemctl start [email protected]"arg1 arg2 arg3".service
y pasa arg1
, arg2
y arg3
como argumentos de línea de comandos separados para test.py.
Lo más fácil que he encontrado es:
ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""
Lo mantiene todo autónomo.
Habiendo dicho eso, descubrí que al menos en Ubuntu 18.04 LTS, ni siquiera necesito hacer eso, puedo hacer esto y funciona bien:
ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"
$vars
funcionan como argumentos con este patrón también.