3 votos

Launchd no carga plists en el arranque

Tengo un conjunto de scripts que necesitan ejecutarse en el arranque del sistema y mantenerse vivos. Tengo el plist guardado como /Library/LaunchAgents/net.vps.tunnel.plist y tiene los permisos adecuados:

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

El script se almacena en root /Library/LaunchAgents NO el usuario ~/Library/LaunchAgents por lo que se supone que se ejecuta en el arranque como superusuario. Si ejecuto manualmente el script a través de sudo launchctl load /Library/LaunchAgents/net.vps.tunnel.plist funciona bien. Pero a pesar de que se supone que debe ejecutarse en el arranque, no lo hace. Cuando compruebo launchctl list inmediatamente después del arranque, veo que no se ha cargado. Intentando arrancar a través de sudo launchctl start net.vps.tunnel falla con el error "launchctl start error: No hay tal proceso".

Si me conecto a través de la GUI, de repente launchd carga todos los scripts. Sin embargo, se ejecutan con mis permisos de usuario y algunos de ellos no funcionan correctamente. En los plists, he especificado la clave UserName como usuario daemon, pero todos se ejecutan con mis credenciales de usuario.

Aquí está el archivo plist en cuestión, ubicado en /Library/LaunchAgents/net.vps.tunnel.plist y con permisos -rw-r--r-- para 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>

Y aquí está el túnel script, con permisos -rwxr-x--- para _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

4voto

Fuzzy Purple Monkey Puntos 702

Intenta mover el plist a /Library/LaunchDaemons/. Los agentes (que no sean agentes de pre-inicio de sesión) se ejecutan sólo después de que un usuario inicie sesión y son propiedad del usuario. También la clave UserName no tiene efecto para los agentes.

Ver el Demonios y agentes nota técnica.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X