Launchd non caricherà i plists all'avvio

2

Ho una serie di script che devono essere eseguiti all'avvio del sistema e rimangono attivi. Ho il plist salvato come /Library/LaunchAgents/net.vps.tunnel.plist e ha le autorizzazioni appropriate:

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

Lo script è archiviato nella directory /Library/LaunchAgents , NON nella directory ~/Library/LaunchAgents dell'utente, quindi dovrebbe essere eseguito all'avvio come superutente. Se eseguo manualmente lo script tramite sudo launchctl load /Library/LaunchAgents/net.vps.tunnel.plist , viene eseguito correttamente. Ma nonostante il fatto che dovrebbe funzionare all'avvio, non è così. Quando controllo launchctl list immediatamente dopo l'avvio, vedo che non è stato caricato. Il tentativo di iniziare tramite sudo launchctl start net.vps.tunnel fallisce con l'errore "launchctl start error: No such process".

Se accedo tramite la GUI, all'improvviso launchd carica tutti gli script. Tuttavia, vengono eseguiti con i miei permessi utente e alcuni di essi non funzionano correttamente. Nei plists, ho specificato la chiave UserName come utente daemon, ma tutti vengono eseguiti con le credenziali dell'utente.

Ecco il file plist in questione, situato in /Library/LaunchAgents/net.vps.tunnel.plist e con -rw-r - r-- autorizzazioni per 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>

Ed ecco lo script del tunnel, con autorizzazioni -rwxr-x --- per _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
    
posta Justin Mrkva 12.11.2013 - 18:52
fonte

1 risposta

3

Prova a spostare il plist su / Library / LaunchDaemons /. Gli agenti (diversi dagli agenti di pre-accesso) vengono eseguiti solo dopo che un utente esegue l'accesso e sono di proprietà dell'utente. Anche la chiave UserName non ha effetto per gli agenti.

Vedi Demoni e agenti nota tecnica.

    
risposta data 12.11.2013 - 19:23
fonte

Leggi altre domande sui tag