Forza launchd per rileggere le variabili d'ambiente

4

C'è un modo, a parte il riavvio, di forzare launchd a rileggere le variabili d'ambiente recentemente definite in /etc/launchd.conf ?

Può essere fatto con launchctl(1) ?

    
posta Ralph 01.02.2012 - 13:23
fonte

2 risposte

2

Non c'è modo di farlo, "launchd" è il processo principale, l'equivalente di "init" in altri sistemi unix, l'unico modo in ogni altro daemon sarebbe di eseguire una sorta di kill -HUP per ricaricare la configurazione file ecc, ma questa operazione non è consentita su launchd. Se lo si osserva nella tabella dei processi, è il processo numero 1, ogni altro processo attualmente in esecuzione è in qualche modo un figlio di esso, quindi un riavvio è l'unico modo per ottenere ciò. Potresti avere maggiore fortuna nell'impostare tali variabili d'ambiente in un'altra area che è più incline a consentire i riavvii.

    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

EDIT:

Ovviamente, manca la soluzione ovvia che è possibile aggiungere le variabili rilevanti nel file di configurazione e quindi eseguire i comandi manualmente per evitare la necessità di un riavvio, niente che solo i nuovi programmi di avvio terranno conto di qualsiasi i cambiamenti. Ho trovato questa pagina che la spiega in modo più dettagliato:

Environment variables set in launchd will be available to all programs on the system. However since $HOME/.launchd.conf is not supported, this approach is used for global environment variables only.

     

Il file /etc/launchd.conf contiene un elenco di comandi da eseguire   launchctl durante l'avvio. Tuttavia, le variabili d'ambiente sono impostate in   /etc/launchd.conf non può avere spazi e non può fare riferimento ad altri   variabili ambientali; launchctl quando viene eseguito in Terminal non ne risente   queste limitazioni. Si noti che /etc/launchd.conf non esiste   di default, quindi dovremo crearlo.

     

Un riavvio è necessario per caricare il contenuto di /etc/launchd.conf.   Tuttavia se dovessi eseguire i corrispondenti launchctlcommands in   Terminale, è possibile alleviare la necessità del riavvio. Ricorda   che se si eseguono solo i comandi launchctl e non si inseriscono le voci   in /etc/launchd.conf, non persisterà dopo il riavvio.

     

Se si desidera avere una variabile d'ambiente estesa al sistema che utilizza   spazi o dipendere da un'altra variabile d'ambiente, puoi mettere   i comandi launchctl in uno dei file letti da Terminal. Desideri   chiudere e riavviare Terminal per accedere alle nuove variabili impostate.

    
risposta data 01.02.2012 - 13:57
fonte
1

Sì, puoi usare launchctl per aggiungerli per te.

ad esempio dal terminale:

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

output sulla mia macchina:

 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

Quindi puoi riavviare qualsiasi app che ne ha bisogno sotto i riflettori

    
risposta data 07.08.2014 - 20:17
fonte

Leggi altre domande sui tag