Launchd no cargará plists en el arranque

2

Tengo un conjunto de scripts que deben ejecutarse durante el inicio del sistema y mantenerse activos. 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 la raíz /Library/LaunchAgents , NO en el directorio del 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 , se ejecuta bien. Pero a pesar del hecho de que se supone que se ejecuta en el arranque, no lo hace. Cuando verifico launchctl list inmediatamente después del inicio, veo que no se ha cargado. El intento de iniciar a través de sudo launchctl start net.vps.tunnel falla con el error "launchctl start error: No hay tal proceso".

Si inicio sesión 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 las listas, he especificado la clave UserName como usuario daemon, pero todas se ejecutan bajo mis credenciales de usuario.

Aquí está el archivo plist en cuestión, ubicado en /Library/LaunchAgents/net.vps.tunnel.plist y con los 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á la secuencia de comandos del túnel, 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
    
pregunta Justin Mrkva 12.11.2013 - 18:52

1 respuesta

3

Intente mover el plist a / Library / LaunchDaemons /. Los agentes (que no sean agentes de preinicio de sesión) se ejecutan solo después de que un usuario inicia sesión y son propiedad del usuario. Además, la clave UserName no tiene efecto para los agentes.

Vea Daemons and Agents nota técnica.

    
respondido por el user495470 12.11.2013 - 19:23

Lea otras preguntas en las etiquetas