0 votes

Launchd décharge LaunchDaemon

J'ai un script programmé pour s'exécuter comme LaunchDaemon. Le script s'exécute bien lorsqu'il est lancé manuellement via le terminal.

J'ai deux commandes

sudo launchctl unload -F /Library/LaunchDaemons/com.test.plist
sudo launchctl load -F /Library/LaunchDaemons/com.test.plist

plist ci-dessous

<?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.test.plist</string>
 <key>Program</key>
 <string>/usr/local/bin/test.sh</string>
 <key>StandardErrorPath</key>
 <string>/tmp/com.test.plist.err</string>
<key>StandardOutPath</key>
<string>/tmp/com.test.plist.out</string>
<key>StartCalendarInterval</key>
<dict>
    <key>Hour</key>
    <integer>18</integer>
    <key>Minute</key>
    <integer>4</integer>
</dict>

lorsqu'ils sont exécutés séparément, ils fonctionnent. Mais une fois planifiés dans launchd, ils s'exécutent pendant une fraction de seconde puis sont déchargés. Je suppose qu'une fois qu'il a déchargé le script, il arrête de fonctionner. Je change les valeurs des intervalles définis dans le plist avec un autre script ce qui explique pourquoi j'ai besoin de décharger et de charger. Y a-t-il un autre moyen de faire cela ?

0 votes

A quoi ressemble la liste - nous devons savoir quelles options vous avez choisies.

0 votes

Eh bien, cela devrait juste exécuter le script et d'après ce que vous dites qu'il fait - qu'est-ce que le fichier texte de sortie montre - qu'est-ce que le script fait / Aussi, que voulez-vous dire par "décharger" - ici, le plist exécute votre script.

0 votes

Il n'écrit rien dans le fichier plist.out. J'obtiens quelques messages d'erreur 'launchd assertion failed' dans la console mais à part ça, rien. Le script fait une sauvegarde initiale et décharge / charge la nouvelle heure de programmation qui est mise à jour en utilisant un autre script qui s'exécute en premier et utilise plistbuddy pour effectuer les changements.

1voto

rpetrich Points 25769

Le problème est-il que votre unload n'est pas terminée avant que la commande load la commande démarre ?

Pourquoi ne pas essayer le kickstart à la place ? "-k" indique à launchctl de "tuer l'instance en cours avant de redémarrer le service".

sudo launchctl kickstart -k /Library/LaunchDaemons/com.test.plist

Notez que load y unload sont maintenant sous "Legacy commands" dans la page de manuel launchctl de Yosemite.

0voto

MBP2013 Points 121

Merci Alastair, c'est bon à savoir pour l'avenir mais pour l'instant je n'utilise que Mavericks.

Ma solution a été de mettre les commandes de chargement dans le premier script (qui n'est pas exécuté par launchd). Je pense que le problème a été causé en essayant de décharger et de charger alors que launchd exécutait déjà le script.

Merci pour les suggestions

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