La respuesta depende de si se supone que la variable es constante (es decir, no debe ser modificada por el usuario que obtiene la unidad) o variable (se supone que debe ser establecida por el usuario).
Como es su unidad local, el límite es bastante borroso y de cualquier manera funcionaría. Sin embargo, si comenzaste a distribuirlo y terminaría en /usr/lib/systemd/system
, esto sería importante.
Valor constante
Si el valor no necesita cambiar por instancia, la forma preferida sería colocarlo como Environment=
, directamente en el archivo de la unidad:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
La ventaja de esto es que la variable se mantiene en un solo archivo con la unidad. Por lo tanto, el archivo de la unidad es más fácil de mover entre sistemas.
Valor variable
Sin embargo, la solución anterior no funciona bien cuando se supone que sysadmin cambia el valor de la variable de entorno localmente. Más específicamente, el nuevo valor debería establecerse cada vez que se actualiza el archivo de la unidad.
Para este caso, se utilizará un archivo adicional. Cómo: generalmente depende de la política de distribución.
Una solución particularmente interesante es usar el /etc/systemd/system/myservice.service.d
directorio. A diferencia de otras soluciones, este directorio es compatible con el sistema en sí y, por lo tanto, no incluye rutas específicas de distribución.
En este caso, coloca un archivo como /etc/systemd/system/myservice.service.d/local.conf
ese que agrega las partes faltantes del archivo de la unidad:
[Service]
Environment="FOO=bar baz"
Posteriormente, systemd combina los dos archivos al iniciar el servicio (recuerde systemctl daemon-reload
después de cambiar cualquiera de ellos). Y dado que systemd usa esta ruta directamente, no la usa EnvironmentFile=
para esto.
Si se supone que el valor debe cambiarse solo en algunos de los sistemas afectados, puede combinar ambas soluciones, proporcionando un valor predeterminado directamente en la unidad y una anulación local en el otro archivo.
sysconfig
ruta es específica de Fedora, pero la pregunta es sobre Arch Linux. La respuesta de paluh es más interesante, creo