La risposta dipende dal fatto che si supponga che la variabile sia costante (ovvero, non dovrebbe essere modificata dall'utente che ottiene l'unità) o variabile (che dovrebbe essere impostata dall'utente).
Dal momento che è la tua unità locale, il confine è piuttosto sfocato e in entrambi i casi funzionerebbe. Tuttavia, se hai iniziato a distribuirlo e sarebbe finito /usr/lib/systemd/system
, questo sarebbe diventato importante.
Valore costante
Se non è necessario modificare il valore per istanza, il modo preferito sarebbe posizionarlo come Environment=
, direttamente nel file dell'unità:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
Il vantaggio è che la variabile viene mantenuta in un singolo file con l'unità. Pertanto, il file di unità è più semplice da spostare tra i sistemi.
Valore variabile
Tuttavia, la soluzione di cui sopra non funziona bene quando si suppone che sysadmin cambi il valore della variabile di ambiente a livello locale. Più specificamente, il nuovo valore dovrebbe essere impostato ogni volta che il file di unità viene aggiornato.
In questo caso, è necessario utilizzare un file aggiuntivo. Come - di solito dipende dalla politica di distribuzione.
Una soluzione particolarmente interessante è usare la /etc/systemd/system/myservice.service.d
directory. A differenza di altre soluzioni, questa directory è supportata dallo stesso systemd e quindi non ha percorsi specifici per la distribuzione.
In questo caso, si inserisce un file simile /etc/systemd/system/myservice.service.d/local.conf
che aggiunge le parti mancanti del file di unità:
[Service]
Environment="FOO=bar baz"
Successivamente, systemd unisce i due file all'avvio del servizio (ricordarsi di systemctl daemon-reload
dopo aver cambiato uno di essi). E poiché questo percorso è usato direttamente da systemd, non lo usi EnvironmentFile=
per questo.
Se il valore deve essere modificato solo su alcuni dei sistemi interessati, è possibile combinare entrambe le soluzioni, fornendo un valore predefinito direttamente nell'unità e un override locale nell'altro file.
sysconfig
percorso sia specifico per Fedora ma la domanda riguarda Arch Linux. Penso che la risposta di Paluh sia più interessante