4 votes

Launchd ne charge pas les listes de diffusion au démarrage

J'ai un ensemble de scripts qui doivent s'exécuter au démarrage du système et rester en vie. J'ai enregistré la plist sous /Library/LaunchAgents/net.vps.tunnel.plist et elle a les bonnes permissions :

-rw-r--r--  1 root  wheel  516 Nov  6 22:03 net.vps.tunnel.plist

Le script est stocké dans le fichier Root /Library/LaunchAgents , PAS l'utilisateur ~/Library/LaunchAgents il est donc censé s'exécuter au démarrage en tant que superutilisateur. Si je lance manuellement le script via sudo launchctl load /Library/LaunchAgents/net.vps.tunnel.plist il fonctionne bien. Mais bien qu'il soit censé s'exécuter au démarrage, ce n'est pas le cas. Lorsque je vérifie launchctl list immédiatement après le démarrage, je vois qu'il n'a pas été chargé. En essayant de démarrer via sudo launchctl start net.vps.tunnel échoue avec l'erreur "launchctl start error : No such process".

Si je me connecte via l'interface graphique, launchd charge soudainement tous les scripts. Cependant, ils s'exécutent avec mes permissions d'utilisateur et certains d'entre eux ne fonctionnent pas correctement. Dans les listes de contrôle, j'ai spécifié la clé UserName en tant qu'utilisateur de démon, mais ils s'exécutent tous avec mes informations d'identification d'utilisateur.

Voici le fichier plist en question, situé dans /Library/LaunchAgents/net.vps.tunnel.plist et avec les permissions -rw-r--r-- pour Root:wheel :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
        <key>Label</key>
                <string>net.vps.tunnel</string>
        <key>ProgramArguments</key>
                <array>
                        <string>/Users/_tunnel/tunnel.sh</string>
                </array>
        <key>RunAtLoad</key>
                <true/>
        <key>WorkingDirectory</key>
                <string>/Users/_tunnel</string>
        <key>UserName</key>
                <string>_tunnel</string>
        <key>KeepAlive</key>
                <true/>
</dict>
</plist>

Et voici le tunnel script, avec les permissions -rwxr-x--- pour _tunnel:_tunnel :

#/bin/bash

logger "Opening VPS tunnel..."

ssh -i ./.ssh/id_rsa -gnN tunnel@********.com &
PID=$!
logger "VPS tunnel is now open."

wait $PID
logger "VPS tunnel is now closed."
exit 0

5voto

Fuzzy Purple Monkey Points 702

Essayez de déplacer la plist dans /Library/LaunchDaemons/. Les agents (autres que les agents de pré-connexion) ne sont exécutés qu'après la connexion d'un utilisateur et ils appartiennent à l'utilisateur. De même, la clé UserName n'a aucun effet sur les agents.

Voir le Démons et agents note technique.

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