使Mac OSX launchctl在启动时以root身份启动进程

Kei*_*son 10 macos daemon launchd

我的问题是如何在重启后使用具有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 
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 20

你把它放在错误的目录中.LaunchAgent是按用户运行的进程.系统进程进入/Library/LaunchDaemons.它们以root身份运行.如果你想在启动时运行它,我建议用以下方法明确表示:

<key>RunAtLoad</key>
<true/>
Run Code Online (Sandbox Code Playgroud)