La réponse dépend de si la variable est supposée être constante (c'est-à-dire, non censée être modifiée par l'utilisateur obtenant l'unité) ou variable (supposée être définie par l'utilisateur).
Puisqu'il s'agit de votre unité locale, la limite est assez floue et de toute façon cela fonctionnerait. Cependant, si vous commencez à le distribuer et que cela se termine /usr/lib/systemd/system
, cela deviendra important.
Valeur constante
Si la valeur n'a pas besoin de changer par instance, la méthode recommandée consiste à la placer Environment=
directement dans le fichier unité:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
L'avantage de cela est que la variable est conservée dans un seul fichier avec l'unité. Par conséquent, le fichier d'unité est plus facile à déplacer entre les systèmes.
Valeur variable
Cependant, la solution ci-dessus ne fonctionne pas bien lorsque sysadmin est supposé changer la valeur de la variable d'environnement localement. Plus spécifiquement, la nouvelle valeur devra être définie chaque fois que le fichier d'unité est mis à jour.
Dans ce cas, un fichier supplémentaire doit être utilisé. Comment - dépend généralement de la politique de distribution.
Une solution particulièrement intéressante consiste à utiliser le /etc/systemd/system/myservice.service.d
répertoire. Contrairement à d'autres solutions, ce répertoire est pris en charge par systemd lui-même et ne comporte donc aucun chemin spécifique à la distribution.
Dans ce cas, vous placez un fichier comme /etc/systemd/system/myservice.service.d/local.conf
celui-ci qui ajoute les parties manquantes du fichier unité:
[Service]
Environment="FOO=bar baz"
Ensuite, systemd fusionne les deux fichiers lors du démarrage du service (n'oubliez pas systemctl daemon-reload
de modifier l'un des fichiers ). Et puisque ce chemin est utilisé directement par systemd, vous ne l'utilisez pas EnvironmentFile=
pour cela.
Si la valeur n'est supposée être modifiée que sur certains des systèmes affectés, vous pouvez combiner les deux solutions, en fournissant une valeur par défaut directement dans l'unité et une substitution locale dans l'autre fichier.
sysconfig
chemin est spécifique à Fedora mais la question concerne Arch Linux. La réponse de paluh est plus intéressante je pense