Paksa launchd untuk membaca kembali variabel lingkungan

4

Adakah cara, kecuali me-reboot, untuk memaksa launchdmembaca kembali variabel lingkungan yang baru didefinisikan /etc/launchd.conf?

Bisakah itu dilakukan launchctl(1)?

Muntah
sumber

Jawaban:

2

Tidak ada cara untuk melakukan ini, "launchd" adalah proses master, setara dengan "init" di sistem unix lainnya, satu-satunya cara dalam daemon lain adalah dengan melakukan semacam kill -HUP untuk memuat ulang file konfigurasi dll, tetapi operasi ini tidak diizinkan pada launchd. Jika Anda mencarinya di tabel proses, ini adalah proses nomor 1, setiap proses lain yang sedang berjalan adalah anak itu, jadi reboot adalah satu-satunya cara untuk mencapai ini. Anda mungkin lebih beruntung dalam mengatur variabel lingkungan tersebut di area lain yang lebih condong untuk memungkinkan restart.

    Dans-iMac:etc stuffe$ ps -ef | grep launchd | grep -v grep
    0     1     0   0  9:40am ??         0:09.47 /sbin/launchd
   65    18     1   0  9:40am ??         1:53.64 /usr/sbin/mDNSResponder -launchd
  213    73     1   0  9:41am ??         0:02.55 /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd -launchd
    0    85     1   0  9:41am ??         0:00.08 /System/Library/CoreServices/ODSAgent.app/Contents/MacOS/ODSAgent -launchd
   89   230     1   0  9:41am ??         0:00.01 /sbin/launchd
  501   238     1   0  9:41am ??         0:00.23 /sbin/launchd
  501   933   238   0 10:53am ??         0:00.01 /System/Library/CoreServices/AirPort Base Station Agent.app/Contents/MacOS/AirPort Base Station Agent -launchd -allowquit

SUNTING:

Tentu saja, kehilangan solusi yang jelas bahwa Anda dapat menambahkan variabel yang relevan ke dalam file konfigurasi, dan kemudian jalankan perintah secara manual untuk menghindari kebutuhan untuk reboot, tidak ada yang hanya program yang baru mulai akan memperhitungkan setiap perubahan. Saya menemukan halaman ini yang menjelaskan secara lebih rinci:

Variabel lingkungan yang diatur dalam launchd akan tersedia untuk semua program pada sistem. Namun karena $ HOME / .launchd.conf tidak didukung, pendekatan ini hanya digunakan untuk variabel lingkungan global.

File /etc/launchd.conf berisi daftar perintah yang harus dijalankan oleh launchctl saat startup. Namun variabel lingkungan yang diatur dalam /etc/launchd.conf tidak dapat memiliki spasi dan tidak dapat merujuk variabel lingkungan lainnya; launchctl ketika dijalankan di Terminal tidak mengalami keterbatasan ini. Perhatikan bahwa /etc/launchd.conf tidak ada secara default, jadi kita harus membuatnya.

Reboot diperlukan untuk memuat konten /etc/launchd.conf. Namun jika Anda menjalankan perintah peluncuran yang sesuai di Terminal, Anda dapat mengurangi kebutuhan untuk reboot. Hanya ingat bahwa jika Anda hanya melakukan perintah launchctl, dan jangan meletakkan entri di /etc/launchd.conf, itu tidak akan bertahan setelah reboot.

Jika Anda ingin memiliki variabel lingkungan sistem lebar yang menggunakan spasi atau bergantung pada variabel lingkungan lain, Anda bisa memasukkan perintah launchctl ke salah satu file yang dibaca Terminal. Anda harus keluar dan meluncurkan kembali Terminal untuk mengakses variabel yang baru ditetapkan.

barang
sumber
1

Ya, Anda dapat menggunakan launchctl untuk menambahkannya untuk Anda.

misalnya dari terminal:

grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl

output pada mesin saya:

 launchctl setenv _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true
 launchctl setenv JMETER_HOME /Applications/apache-jmeter-2.10
 lauchctl setenv GRADLE_HOME /usr/local/gradle-2.0

Kemudian Anda dapat memulai ulang aplikasi apa pun yang membutuhkannya menjadi sorotan

Peter
sumber
@Peter dilakukan dengan baik. 3 tahun 9 bulan kemudian, ini bekerja seperti juara.
tim.rohrer