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.
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.
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
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.