La réponse dépend du fait que la variable est censée être constante (c'est-à-dire qu'elle n'est pas censée être modifiée par l'utilisateur qui obtient l'unité) ou variable (censée être définie par l'utilisateur).
Étant donné qu'il s'agit de votre unité locale, la frontière est assez floue et l'une ou l'autre solution pourrait fonctionner. Cependant, si vous commenciez à le distribuer et qu'il finissait en /usr/lib/systemd/system
cela deviendrait important.
Valeur constante
Si la valeur n'a pas besoin de changer par instance, il est préférable de la placer en tant que Environment=
directement dans le fichier de l'unité :
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
L'avantage de cette méthode est que la variable est conservée dans un seul fichier avec l'unité. Par conséquent, le fichier de l'unité est plus facile à déplacer entre les systèmes.
Valeur de la variable
Cependant, la solution ci-dessus ne fonctionne pas bien lorsque l'administrateur système est censé modifier la valeur de la variable d'environnement localement. Plus précisément, la nouvelle valeur devrait être définie à chaque fois que le fichier d'unité est mis à jour.
Dans ce cas, un fichier supplémentaire doit être utilisé. Comment - cela dépend généralement de la politique de distribution.
Une solution particulièrement intéressante consiste à utiliser /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 à une distribution.
Dans ce cas, vous placez un fichier comme /etc/systemd/system/myservice.service.d/local.conf
qui ajoute les parties manquantes du fichier de l'unité :
[Service]
Environment="FOO=bar baz"
Ensuite, systemd fusionne les deux fichiers lors du démarrage du service (rappelez-vous de systemctl daemon-reload
après avoir changé l'un ou l'autre). Et puisque ce chemin est utilisé directement par systemd, vous ne devez pas utiliser EnvironmentFile=
pour ça.
Si la valeur n'est censée être modifiée que sur certains des systèmes concernés, vous pouvez combiner les deux solutions, en fournissant une valeur par défaut directement dans l'unité et une dérogation locale dans l'autre fichier.