2013-06-12 6 views
9

Meine Frage ist, wie man einen MacOSX Daemon-Prozess mit Launchd Start mit Root-Berechtigungen automatisch nach einem Neustart machen?Mac OSX starten launchctl startet einen Prozess als root beim Start

Ich schreibe eine Anwendung für In-House-Verwendung, die den Zugriff auf Websites blockiert. Es ist in Python geschrieben und ändert die Datei/ect/hosts, um aufgelistete URLs zu deaktivieren oder zu aktivieren. Die Hauptanwendung ist in Django und ich habe einen Python-Twisted-Daemon erstellt, der die eigentliche Änderung der/etc/hosts-Datei vornimmt, da Root-Zugriffsrechte erforderlich sind.

Ich habe eine Plist-Datei erstellt, die mit einem kleinen Problem funktioniert. Nach dem Neustart hat der Daemon-Prozess meine normalen Anmeldeberechtigungen anstelle von root-Rechten.

Eine Problemumgehung besteht darin, den Prozess mit meinen normalen Berechtigungen zu stoppen und dann den Prozess mit sudo zu starten.

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

Die plist Datei

<?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> 

Antwort

19

Sie haben dies im falschen Verzeichnis. LaunchAgents sind pro Benutzer ausgeführte Prozesse. Systemprozesse gehen in /Library/LaunchDaemons. Sie werden als root ausgeführt. Wenn Sie möchten, dass dies beim Start ausgeführt wird, empfehle ich, dies explizit zu machen mit:

+0

Dank Rob. Prost Keith. –

Verwandte Themen