4 votes

Forcer launchd à relire les variables d'environnement

Existe-t-il un moyen, autre qu'un redémarrage, de forcer l'accès à l'Internet ? launchd pour relire les variables d'environnement nouvellement définies dans /etc/launchd.conf ?

Peut-on le faire avec launchctl(1) ?

2voto

stuffe Points 25320

Il n'y a aucun moyen de le faire, "launchd" est le processus maître, l'équivalent de "init" dans d'autres systèmes Unix, le seul moyen pour tout autre démon serait d'effectuer une sorte de kill -HUP pour recharger les fichiers de configuration, etc, mais cette opération n'est pas autorisée sur launchd. Si vous regardez dans la table des processus, c'est le processus numéro 1, tous les autres processus en cours d'exécution sont d'une manière ou d'une autre des enfants de ce processus, de sorte qu'un redémarrage est le seul moyen d'y parvenir. Vous aurez peut-être plus de chance en définissant ces variables d'environnement dans un autre domaine plus enclin à autoriser les redémarrages.

    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 :

Bien sûr, il manque la solution évidente qui consiste à ajouter les variables pertinentes dans le fichier de configuration, puis à exécuter les commandes manuellement afin d'échapper à la nécessité d'un redémarrage, mais rien n'indique que seuls les programmes nouvellement lancés prendront en compte les changements. J'ai trouvé cette qui l'explique plus en détail :

Les variables d'environnement définies dans launchd seront disponibles pour tous les programmes du système. Cependant, comme $HOME/.launchd.conf n'est pas pas pris en charge, cette approche est utilisée pour les variables d'environnement globales uniquement.

Le fichier /etc/launchd.conf contient une liste de commandes à exécuter par launchctl lors du démarrage. Toutefois, les variables d'environnement définies dans le fichier /etc/launchd.conf ne peuvent pas contenir d'espaces et ne peuvent pas faire référence à d'autres variables d'environnement. d'environnement ; launchctl, lorsqu'il est exécuté dans Terminal, ne souffre pas de ces ne souffre pas de ces limitations. Notez que le fichier /etc/launchd.conf n'existe pas par défaut. par défaut, nous devrons donc le créer.

Un redémarrage est nécessaire pour charger le contenu de /etc/launchd.conf. Cependant, si vous exécutez la commande correspondante Terminal, vous pouvez éviter le redémarrage. Rappelez-vous que si vous n'exécutez que les commandes launchctl, et ne mettez pas les entrées dans le fichier /etc/launchd.conf, il ne persistera pas après le redémarrage.

Si vous souhaitez disposer d'une variable d'environnement à l'échelle du système qui utilise la fonction ou dépendre d'une autre variable d'environnement, vous pouvez utiliser la commande les commandes launchctl dans l'un des fichiers que Terminal lit. Vous devrez devrez quitter et relancer Terminal pour accéder aux nouvelles variables.

1voto

Peter Points 11

Oui, vous pouvez utiliser launchctl pour les ajouter pour vous.

par exemple à partir du terminal :

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

sur ma machine :

 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

Vous pouvez ensuite redémarrer l'application qui en a besoin.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X