Ho inserito un demone launchd ~/Library/LaunchAgents
che ha funzionato bene in Mavericks. Ma non inizierà nella beta pubblica di Yosemite. Il demone plist è così (il mio nome utente è darksair
con UID 501)
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Fondamentalmente dovrebbe funzionare ~/bin/retrmail.py
ogni 5 minuti.
Ho notato che in Yosemite launchd è aggiornato alla 2.0 e launchctl ha nuovi comandi. Provai
sudo launchctl kickstart user/501/org.darksair.retrmail
e diceva
Could not find service "org.darksair.retrmail" in domain for uid: 501
Ho anche provato la vecchia scuola
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
e diceva
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
Il file appartiene a me e al gruppo del personale. Ho provato sia l'autorizzazione 644 che 600 con lo stesso errore.
Quindi qualcuno sa come avviare correttamente un demone launchd in Yosemite?
AGGIORNAMENTO: sembra che il mio file dell'agente di avvio debba essere di proprietà di root:wheel
. Dopo chown, ho provato
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
e non ha emesso alcun errore. E penso che il mio deamon stia funzionando correttamente. Lascerò aperta questa domanda perché ricordo che il documento launchd afferma chiaramente che il file dell'agente di avvio può essere di proprietà dell'utente che esegue il daemon.
AGGIORNAMENTO2: No, non funzionava correttamente. È stato eseguito solo una volta, ma non di nuovo, come se fosse scaricato.
AGGIORNAMENTO3: ho eseguito l'upgrade a Yosemite public beta 3 e ho cambiato il mio agente in questo
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Ho ricaricato questo agente e penso che ora funzioni correttamente. Lascio ancora aperta questa domanda perché non so cosa c'è che non va nel mio precedente plist.
In conclusione, quello che ho scoperto è che devo cambiare il proprietario del plist root:wheel
per caricarlo.