¿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
EnvironmentFiletu 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.serviceque pasa las variables?PassEnvironmentdirectiva, pero toma variables delsystemdproceso (normalmente PID 1), no desystemctl. Las variables de entorno delsystemctlproceso 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".servicey pasaarg1,arg2yarg3como argumentos de línea de comandos separados para test.py.fuente
Wants=argtest@"arg1 arg2".servicey 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:
$varsfuncionan como argumentos con este patrón también.fuente