12

我的问题是如何在重新启动后自动使用 launchd 以 root 权限启动 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>
4

1 回答 1

23

你把它放在错误的目录中。LaunchAgent 是按用户运行的进程。系统进程进入/Library/LaunchDaemons。它们以 root 身份运行。如果您希望它在启动时运行,我建议使用以下命令明确:

<key>RunAtLoad</key>
<true/>
于 2013-06-13T05:15:42.847 回答