Pourquoi mon fichier de circuit de configuration ne charge pas comme service à l'aide de LaunkCtl?
Je suis en cours d'exécution OSX Yosemite et j'ai lu cet excellent tutoriel sur l'utilisation de LaunchCtl http://nathangrigg.net/2012/07/schedule-jobs-utilisateur-launchd/
J'ai créé un fichier .Plist correct avec la configuration du service (je sais que cela est correct car c'est une copie presque exacte d'un fichier de configuration de plis de travail que j'ai créé il y a plusieurs années). Je tape dans
launchctl load ~/Library/LaunchAgents/com.Apple.myservice.plist
et obtenir en réponse
~/Library/LaunchAgents/com.Apple.myservice.plist: File exists
Ce n'est pas terriblement descriptif, mais je vais taper
launchctl start com.Apple.myservice
et il n'y a pas de sortie et rien ne se passe. J'ai aussi essayé d'utiliser
launchctl enable ~/Library/LaunchAgents/com.Apple.myservice.plist
et je viens d'obtenir un
Usage: launchctl enable <service-target>
en réponse.
Quelqu'un peut-il répondre avec la syntaxe correcte pour charger un service de lanceur sur OSX Yosemite?
launchd
peut facilement entrer dans les états "étranges".
load
signifie Lire Le fichier de configuration et potentiellement un lancement.unload
signifie stop
et ne faisant pas échouer le fichier de configurationstart
commencera le service (ignorer le calendrier, je crois)stop
arrêtera le service (à nouveau, ignorant le calendrier)Généralement, si vous souhaitez "redémarrer", vous déchargez et rechargez la configue comme celle-ci:
launchctl unload -w ~/Library/LaunchAgents/com.Apple.myservice.plist
launchctl load -w ~/Library/LaunchAgents/com.Apple.myservice.plist
Le -w
signifie "écrire", ce qui signifie que le changement affectera les redémarrages (chargera chaque connexion ou démarrage ... ou ne chargera plus jamais de nouveau à la connexion ou à la démarrage).
Si c'est un service au niveau du système (en /Library/LaunchDaemons
ou alors /Library/LaunchAgents
Vous devrez peut-être le faire avec Sudo
(et si vous l'avez fait sans sudo par erreur, vous devrez peut-être le décharger sans sudo, puis le recharger avec sudo)
La clé d'un fichier qui le cause start
_ load
est RunAtLoad
(et KeepAlive
garde le fonctionnement s'il meurt pour une raison quelconque)
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
Il est parfois difficile d'obtenir une journalisation de débogage de LaunkCtl lui-même, mais les clés StandardErrorPath
et StandardOutPath
peuvent au moins vous aider à savoir si votre application est en train de mourir en raison d'informations manquantes ou mauvaises (une variable d'environnement non-imputable ou Chemin non écritable, par exemple). Assurez-vous simplement que le chemin que vous spécifiez est écritable par l'utilisateur exécutant le processus.
<key>StandardErrorPath</key>
<string>/tmp/appname-error.log</string>
<key>StandardOutPath</key>
<string>/tmp/appname-info.log</string>
Parce qu'ils sont si difficiles à déboguer, je recommanderais d'utiliser LaunchControl ou lancé et mélangez cela avec une lecture saine de launchd.info .
En outre, il existe un certain nombre d'astuces de débogage ici: https://serverfault.com/questions/183589/how-do-activate-launchd-logging-on-os-x
Je ne l'ai pas encore essayé moi-même, mais cette solution a l'air le plus simple:
Sudo launchctl log level debug
tail -f /var/log/system.log