Deamon launchd and shutdown

Bonjour.


 


Je cherche à  mettre en place un lancement automatique d'un deamon.


pour cela j'ai fait un agent launchd avec pour argument mon exécutable et ses paramettres


demarrage en serveur


<key>ProgramArguments</key>

<array>

<string>/myPath/foo</string>

<string>server</string>

</array>

 


jusque la pas de pb avec un RunAtLoad true ça démarre sans pb.


 


mon problème c'est l'arrêt


je voudrais mettre un autre agent (ou le même) pour la phase d'arrêt genre "run at unload"


<key>ProgramArguments</key>

<array>

<string>/myPath/foo</string>

<string>stop</string>

</array>

 

qui arrêterait proprement mon demon.

Mais je n'ai pas trouvé comment ça marche.

dans la doc sur launchd plist je n'ai pas trouvé de tag pour les phases d'arrêt

 

comment fonctionne la phase d'extinction de MacOS

 

je voudrais aussi avoir la possibilité de lancer un deamon lorsqu'un utilisateur ouvre une session et arrêter ce deamon lorsque il la ferme.

aujourd'hui j'utilise le tableau de bord utilisateur onglet ouverture. mais là  encore rien pour la phase d'arrêt.

 

A+JYT

 

 

Réponses

  • zoczoc Membre
    octobre 2013 modifié #2

    Pour l'arrêt c'est simple : launchd va envoyer un signal SIGTERM à  ton daemon lorsque la machine s'arrête (ou lorsque tu utilises "launchctl unload" dans une fenêtre terminal). Il ne faut donc pas faire un fichier plist pour l'arrêt du daemon, mais plutôt gérer correctement ce signal pour s'arrêter proprement.


     


    On ne peut pas lancer de daemon lors de l'ouverture d'une session. Ce n'est pas une limitation technique, mais un problème de terminologie  ??? :


     


    Les "daemons" liés à  des sessions sont appelés "agents", et pas "daemons". Donc Pour lancer automatiquement un agent à  l'ouverture d'une session et l'arrêter à  la fermeture de la session, il faut créer un fichier plist dans /Library/LaunchAgents (et tous les utilisateurs de la machine en profiteront) ou dans /Users/theuser/Library/LaunchAgents (et seul l'utilisateur theuser sera concerné). Pour l'arrêt en fin de session, même chose que ci-dessus : SIGTERM.


     


     


    PS : Si ton process ignore le SIGTERM, alors launchd le tuera (SIGKILL) après le timeout d'arrêt configuré dans le plist (20 secondes par défaut).


Connectez-vous ou Inscrivez-vous pour répondre.