2013-06-12 20 views
9

La mia domanda è come eseguire un processo daemon MacOSX utilizzando launchd start con i privilegi di root automaticamente dopo un riavvio?Fare Mac OSX launchctl avviare un processo come root all'avvio

Sto scrivendo un'applicazione per uso interno che blocca l'accesso ai siti Web. È scritto in python e modifica il file/ect/hosts per disabilitare o abilitare gli URL elencati. L'applicazione principale è in django e ho creato un demone twistato python che esegue la modifica effettiva del file/etc/hosts in quanto sono richiesti i privilegi di accesso root.

Ho creato un file plist che funziona con un problema minore. Dopo il riavvio, il processo daemon ha i miei normali privilegi di accesso invece dei privilegi di root.

Una soluzione è interrompere il processo con i miei privilegi normali quindi avviare il processo con sudo.

launchctl unload /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist 
sudo launchctl load /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist 

Il file plist

<?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>com.balanceinfosystems.socialshields.twisted</string> 
    <key>Program</key> 
    <string>/source/social_shields/social_shields_twisted.py</string> 
    <key>KeepAlive</key> 
    <true/> 
    </dict> 
</plist> 

risposta

19

hai messo questo nella directory sbagliata. I LaunchAgent sono processi eseguiti per utente. I processi di sistema vanno in /Library/LaunchDaemons. Sono eseguiti come root. Se vuoi che questo funzioni all'avvio, ti consiglio di renderlo esplicito con:

<key>RunAtLoad</key> 
<true/> 
+0

Grazie Rob. Saluti Keith. –