GNU/Linux >> Tutoriales Linux >  >> Linux

systemd - Dando a mi servicio múltiples argumentos

¡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.


Linux
  1. 10 comandos prácticos de systemd:una referencia

  2. Agregar un nuevo servicio a Linux systemd

  3. ¿Escribir archivos de servicio básicos de Systemd?

  4. Cómo redirigir la salida del servicio systemd a un archivo

  5. @reboot no funciona en CRON

Administre múltiples instancias de servicio con systemctl

Comandos Systemctl para administrar el servicio Systemd

Uso de las funciones de systemd para proteger los servicios

Administrar cgroups con systemd

redirigir los registros del servicio systemd al archivo

activación de socket systemd frente a xinetd