Miliki pemula membaca lingkungan dari / etc / environment untuk suatu layanan

17

Apa cara terbaik untuk menyediakan variabel lingkungan yang ditentukan /etc/environmentuntuk layanan pemula ?

Saya pikir hanya sumber mereka dengan .di bagian skrip tidak berfungsi, karena skrip dieksekusi oleh shyang akan memerlukan tambahan exportdi depan setiap definisi ...

Nikratio
sumber

Jawaban:

16

Saya akhirnya mendapat jawaban di #upstartsaluran IRC. Pada titik tertentu, pemula akan mendapatkan dukungan PAM yang tepat dan dengan demikian membaca /etc/environmentsendiri. Sampai saat itu, triknya adalah menjalankan perintah dengan su. sumenggunakan PAM dan akan mengatur lingkungan yang tepat. Contoh:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
Nikratio
sumber
Terima kasih telah mengirimkan jawabannya, Anda telah membantu saya dalam masalah yang persis sama.
Maxim Veksler
kesalahan:su: must be run from a terminal
Kuf
3

Saya cenderung menggunakan eval $(cat /etc/environment | sed 's/^/export /')

Dibutuhkan setiap baris dalam /etc/environment, prepends export, dan mengevaluasinya:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
sumber
Mengapa Anda menggunakan exec dan tidak hanya menempatkan ekspor langsung di blok skrip?
Guss
1

Tambahkan ini ke skrip Anda:

. /etc/environment
export VAR1 VAR2 VAR3

di mana variabel yang Anda butuhkan ditentukan sebagai pengganti placeholder gaya "VAR1".

Dijeda sampai pemberitahuan lebih lanjut.
sumber
2
Dengan cara itu saya harus secara manual menjaga konfigurasi pemula dan / etc / environment dalam sinkronisasi, yang (menurut saya) tidak lebih baik daripada mendefinisikan variabel dua kali ...
Nikratio
Saya tidak akan menggunakan /etc/environmentuntuk mendefinisikan semua variabel yang Anda butuhkan. Biarkan itu sebagai file statis. Di sistem saya, saya hanya dapat menemukan beberapa skrip yang menggunakannya. Buat file bernama sesuatu seperti /etc/environment.localdan menempatkan variabel Anda dan ekspor di sana dan sumber yang berkas. Maka Anda hanya perlu mempertahankan satu file itu.
Dijeda sampai pemberitahuan lebih lanjut.
/ etc / environment dibaca oleh pam_env.so (dan bukan oleh skrip apa pun), sehingga tersedia untuk semua login. Sayangnya, hanya program yang dimulai oleh pemula tidak memiliki akses ke file itu dengan defaulht.
Nikratio