我的问题是如何在重启后使用具有root权限的launchd start创建MacOSX守护进程?
我正在编写一个内部使用的应用程序来阻止访问网站。它是用python编写的,并修改/ ect / hosts文件以禁用或启用列出的URL。主要的应用程序是在django中,我创建了一个python twisted守护进程,它实现了/ etc / hosts文件的实际修改,因为root访问权限是必需的。
我创建了一个plist文件,它可以处理一个小问题。重新启动后,守护进程具有正常的登录权限,而不是root权限。
解决方法是使用我的普通权限停止进程,然后使用sudo启动进程。
launchctl unload /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist
sudo launchctl load /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist
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>
答案 0 :(得分:19)
你把它放在错误的目录中。 LaunchAgent是按用户运行的进程。系统流程进入/Library/LaunchDaemons
。它们以root身份运行。如果您希望在启动时运行它,我建议使用以下命令将其显式化:
<key>RunAtLoad</key>
<true/>