Jawabannya tergantung pada apakah variabel seharusnya konstan (yaitu, tidak seharusnya dimodifikasi oleh pengguna mendapatkan unit) atau variabel (seharusnya ditetapkan oleh pengguna).
Karena ini adalah unit lokal Anda, batasnya cukup buram dan bagaimanapun cara kerjanya. Namun, jika Anda mulai mendistribusikannya dan akan berakhir /usr/lib/systemd/system
, ini akan menjadi penting.
Nilai konstan
Jika nilainya tidak perlu diubah per instance, cara yang disukai adalah menempatkannya Environment=
langsung di file unit:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
Keuntungannya adalah bahwa variabel disimpan dalam satu file dengan unit. Oleh karena itu, file unit lebih mudah untuk dipindahkan antar sistem.
Nilai variabel
Namun, solusi di atas tidak berfungsi dengan baik ketika sysadmin seharusnya mengubah nilai variabel lingkungan secara lokal. Lebih khusus lagi, nilai baru perlu ditetapkan setiap kali file unit diperbarui.
Untuk kasus ini, file tambahan harus digunakan. Bagaimana - biasanya tergantung pada kebijakan distribusi.
Salah satu solusi yang sangat menarik adalah dengan menggunakan /etc/systemd/system/myservice.service.d
direktori. Tidak seperti solusi lain, direktori ini didukung oleh systemd sendiri dan karenanya tidak ada jalur distribusi khusus.
Dalam hal ini, Anda menempatkan file seperti /etc/systemd/system/myservice.service.d/local.conf
itu menambahkan bagian-bagian yang hilang dari file unit:
[Service]
Environment="FOO=bar baz"
Setelah itu, systemd menggabungkan kedua file ketika memulai layanan (ingat untuk systemctl daemon-reload
setelah mengubah salah satu dari mereka). Dan karena jalur ini digunakan langsung oleh systemd, Anda tidak menggunakannya EnvironmentFile=
untuk ini.
Jika nilainya seharusnya diubah hanya pada beberapa sistem yang terpengaruh, Anda dapat menggabungkan kedua solusi, memberikan default langsung di unit dan override lokal di file lain.
sysconfig
jalurnya khusus untuk Fedora tetapi pertanyaannya adalah tentang Arch Linux. Jawaban paluh lebih menarik menurut saya