¿Es posible darle a mi servicio systemd más de un argumento?
Me gustaría ejecutar un programa con múltiples argumentos que deben ser decididos por el usuario final.
P.ej: ./program arg1 arg2
Para iniciar una aplicación de argumento único, necesitaría algo como systemctl start arg1@program
, en qué parte de la definición del servicio tengo ExecStart = /usr/bin/program ℅i
.
¡Gracias!
Respuestas:
¡Sí tu puedes! Defínalos en un archivo en algún lugar y agrégalos a
EnvironmentFile
tu servicio systemd. Por ejemplo, supongamos que los contenidos de /etc/.progconf son:Y tu archivo .service:
Puede escribir en ese archivo si necesita cambiarlos sobre la marcha. Un servicio no debe cambiar sus opciones muy a menudo, tal vez considere iniciar automáticamente o cron si necesita lograrlo.
Para ver más ejemplos, consulte: https://wiki.archlinux.org/index.php/Systemd/Services
fuente
VAR1=... VAR2=... systemctl start foobar.service
que pasa las variables?PassEnvironment
directiva, pero toma variables delsystemd
proceso (normalmente PID 1), no desystemctl
. Las variables de entorno delsystemctl
proceso no se propagan al servicio que se inicia.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 espacio variable de entorno de systemd para separar los argumentos.
Hice un servicio con nombre de archivo
[email protected]
( tenga en cuenta el 'at sign' final que se requiere cuando un servicio toma argumentos ).Ejecuto esto
sudo systemctl start argtest@"arg1 arg2 arg3".service
y pasaarg1
,arg2
yarg3
como argumentos de línea de comandos separados para test.py.fuente
Wants=argtest@"arg1 arg2".service
y solo se aprobó el primer argumento.Lo más fácil que he encontrado es:
Lo mantiene todo autocontenido.
Dicho esto, descubrí que al menos en Ubuntu 18.04 LTS, ni siquiera necesito hacer eso, puedo hacer esto y funciona bien:
$vars
funcionan como argumentos con este patrón también.fuente