【问题标题】:Making Mac OSX launchctl launch a process as root on startup让 Mac OSX launchctl 在启动时以 root 身份启动进程
【发布时间】:2013-06-09 05:08:42
【问题描述】:

我的问题是如何让 MacOSX 守护进程使用 launchd 在重启后自动以 root 权限启动?

我正在编写一个阻止访问网站的内部使用应用程序。它是用 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>

【问题讨论】:

    标签: macos daemon launchd


    【解决方案1】:

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

    <key>RunAtLoad</key>
    <true/>
    

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2022-10-16
      • 1970-01-01
      • 2013-11-23
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多