web-dev-qa-db-fra.com

Comment démarrer un service à l'aide de KauntCtl de Mac OSX

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?

6
almel

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 configuration
  • start 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
7
CoolAJ86