GNU/Linux >> Belajar Linux >  >> Linux

Env Vars Di /etc/environment Tidak Terlihat Secara Global?

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.
Terkait:Facebook :Tab Foto tidak terlihat di profil untuk 'Semua Orang'?
Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Bagaimana Systemd Menggunakan Skrip /etc/init.d?

  3. Sertakan Nama Domain Atau Tidak Di /etc/hosts?

  1. Perbedaan Antara ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …?

  2. Apakah Systemd Membaca /etc/pm/…?

  3. Referensi Variabel Lingkungan *di* /etc/environment?

  1. /etc/passwd menampilkan pengguna dalam grup, tetapi /etc/group tidak

  2. menggunakan pengatur waktu systemd, bukan cron

  3. File layanan ada tetapi tidak ditemukan oleh systemd