web-dev-qa-db-fra.com

Très simple plist Launchd ne pas exécuter mon script

J'essaie de comprendre pourquoi mon script launchd ne fonctionne pas. C’est extrêmement simple, mais je suis novice dans l’environnement mac et j’essaie de m’habiller Voici mon plist. Je sais que ProgramArguments est requis, alors je viens de mettre le chemin du script dedans.

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
  <key>Label</key>  
  <string>com.Tomcat.plist</string>   
  <key>ProgramArguments</key>  
  <array>  
    <string>/opt/Apache-Tomcat-5.5.27/bin/startup.sh</string>  
  </array>  
  <key>OnDemand</key>  
  <false/>  
</dict>  
</plist>

Lorsque j'essaie d'exécuter launchctl load <name>, il semble se charger correctement (en ce sens qu'il ne me donne aucun message d'erreur), mais le script ne semble pas s'exécuter, même au redémarrage.

J'ai utilisé tous les exemples que j'ai trouvés en ligne et je ne comprends pas pourquoi cela n'exécute pas mon script au démarrage.

29
Oliver

Juste au cas où quelqu'un d'autre rencontrerait ce problème et aurait déjà <key>RunAtLoad</key><true/> dans sa liste, je souhaite proposer des solutions supplémentaires.

Vérifiez les autorisations pour vous assurer que votre script est exécutable (cherchez un 'x'):

ls -l /opt/Apache-Tomcat-5.5.27/bin/startup.sh

Modifiez les autorisations si nécessaire:

chmod +x /opt/Apache-Tomcat-5.5.27/bin/startup.sh

Exécutez également le script directement en premier et assurez-vous que cela fonctionne:

/opt/Apache-Tomcat-5.5.27/bin/startup.sh

Si le script est exécutable et s’exécute directement, essayez d’ajuster le journal système pour déboguer launchd:

Sudo launchctl log level debug 
tail -f /var/log/system.log

L'indicateur -f (à la base) indique en permanence la fin (dernières entrées) du journal. Vous pouvez supprimer cet indicateur pour simplement imprimer un instantané de la fin du journal. Si vous utilisez cet indicateur, vous devrez ouvrir un nouveau terminal pour exécuter d'autres commandes. Appuyez sur CTRL + C pour mettre fin à la session finale. Pour plus d'informations:

man tail

Lorsque vous avez terminé le débogage:

Sudo launchctl log level error

Il existe d'autres niveaux de journalisation. Pour plus d'informations:

man launchctl

Si vous apportez des modifications au script ou à la plist, veillez à recharger la plist. Par exemple:

launchctl unload ~/Library/LaunchAgents/com.Tomcat.plist
launchctl load ~/Library/LaunchAgents/com.Tomcat.plist

Si vous avez UNIQUEMENT apporté des modifications au script et PAS au plist, vous pouvez simplement redémarrer le plist:

launchctl stop com.Tomcat.plist
launchctl start com.Tomcat.plist

Si vous ajoutez la valeur-clé suivante à votre plist:

<key>KeepAlive</key>
<true/>

Ensuite, vous pouvez simplement lancer:

launchctl stop com.Tomcat.plist

Et il va redémarrer automatiquement.

Si rien de tout cela ne vous aide et que vous rencontrez des problèmes pour configurer Tomcat sous OS X, ce didacticiel pourrait vous être utile.

43
Aaron Mahan

Pour que votre script s'exécute automatiquement lorsque vous appelez launchctl load, vous devez ajouter: -

<key>RunAtLoad</key>
<true/>

Sinon, vous pouvez utiliser: -

launchctl start com.Tomcat.plist
13
James Mead

Bien que j'imagine que la plupart des gens n'auront pas ce problème, je pense que cela vaut la peine de la mettre ici, car j'ai passé presque deux heures à essayer de comprendre pourquoi launchd load ne fonctionnait pas malgré le renvoi d'un code de sortie 0.

Le problème était simple. Mon fichier plist avait la mauvaise extension de fichier (j'avais "plst") et launchctl refusait en silence de charger le fichier. Changer l'extension en plist a résolu le problème.

0
fakedad