Saya mencoba membuat systemd
layanan;
Layanan ini memiliki skrip yang seharusnya menggunakan beberapa variabel lingkungan;
Jadi saya membuat ini:
cat /etc/systemd/system/atlantis-server.service
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh
Yang menunjuk ke ini
[email protected]:~$ cat /usr/local/bin/atlantis-server.sh
#!/bin/bash
source /etc/environment
atlantis server --atlantis-url="$URL" --gitlab-user="$USERNAME" --gitlab-token="$TOKEN" --gitlab-webhook-secret="$SECRET" --gitlab-hostname="$HOSTNAME" --repo-whitelist="$REPO_WHITELIST"
Apa yang saya perhatikan (setelah beberapa kesalahan di systemd
saya logs) adalah bahwa saya harus secara eksplisit source /etc/environment
(di sinilah vars di atas dideklarasikan).
Mengapa ini diperlukan?
Bukankah mereka terlihat secara global?
edit :Menambahkan ini ke definisi layanan tidak menyelesaikan masalah
Environment=/etc/environment
Jawaban yang Diterima:
/etc/environment
bukan file konfigurasi global.
Ini berlaku hanya di Linux; hanya ke sesi PAM, seperti yang digunakan oleh login
Dan seterusnya; dan hanya dalam kasus di mana plug-in PAM tertentu diinstal dan diaktifkan pada sistem, dan di mana plug-in PAM tersebut belum dikonfigurasikan untuk menggunakan beberapa file lain (karena /etc/environment
hanyalah defaultnya jika tidak diberitahukan sebaliknya). Plug-in PAM yang membacanya.
Jika tidak, itu hanya file yang tidak berarti di /etc
yang tidak ada gunanya.
Sementara Anda bisa atur variabel lingkungan secara global di systemd-system.conf
, ini berlaku untuk semua layanan, bukan hanya layanan yang ingin Anda ubah.
Demikian pula, saat EnvironmentFile
di unit layanan yang sesuai adalah cara agar systemd membaca file umum dengan daftar definisi variabel lingkungan, orang-orang systemd tidak menyarankan penggunaannya. Mereka menganggap EnvironmentFile
sebagai ide yang buruk, dan penggunaannya sebagai kesalahan.
Cara yang tepat untuk melakukan ini per orang systemd adalah dengan mengatur setiap variabel di unit layanan dengan Environment
pengaturan, yang berisi nama dan nilai variabel lingkungan yang sebenarnya yang akan disetel, bukan nama file. Ini bisa langsung di unit layanan yang relevan, jika seperti di sini seseorang menulis unit layanannya sendiri untuk ditempatkan di /etc
; atau berada di .conf
menimpa file, jika seseorang menyesuaikan unit layanan pra-paket di /lib
atau /usr/lib
.
Bacaan lebih lanjut
- https://unix.stackexchange.com/a/419061/5132
- Lennart Poettering dkk. (2016).
systemd-system.conf
. halaman manual systemd. Freedesktop.org. - Lennart Poettering dkk. (2016).
systemd.exec
. halaman manual systemd. Freedesktop.org. - Andrew G. Morgan dan Thorsten Kukuk (Agustus 2010). “pam_env — set/unset variabel lingkungan“. Panduan Administrator Sistem Linux-PAM . linux-pam.org.