Adakah cara, kecuali me-reboot, untuk memaksa launchd
membaca kembali variabel lingkungan yang baru didefinisikan /etc/launchd.conf
?
Bisakah itu dilakukan launchctl(1)
?
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.
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