【问题标题】:OS X launchd script fails to run at startup?OS X 启动脚本无法在启动时运行?
【发布时间】:2015-08-22 19:42:45
【问题描述】:

我创建了一个启动脚本来在启动时为我运行一般脚本,但我无法让它工作。我正在运行 OS X Yosemite 10.10.5。这是我的 /Library/LaunchDaemons/com.craig.startup.items 文件(我刚刚注意到它没有“.plist”扩展名。我将在发布此问题后添加扩展名并重新启动):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.craig.startup.items</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/Users/cliff/startup/onlaunchd</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

并且 /Users/cliff/startup/onlaunchd 包含以下内容:

#!/bin/sh

log=/Users/cliff/startup/status.log
echo "`date` running startup scripts." >> $log
pushd /Users/cliff/startup/scripts/
for each in `ls`; do echo "`date` Running $each" >> $log; sh $each; done
popd

还有其他脚本涉及,但 onlaunchd 不会触发,因为我从未在 /Users/cliff/startup/status.log 中看到日志输出。如果我直接以 root 身份运行它,它就可以正常工作。除了可能的扩展之外,我还缺少什么?

【问题讨论】:

  • 你跑sudo launchctl load -w /Library/LaunchDaemons/com.craig.startup.items.plist了吗?
  • 啊...我得到“/Library/LaunchDaemons/com.craig.startup.items.plist:路径的所有权/权限不正确”。我只是将所有权设置为 root:wheel ,这似乎在 cmd 行上修复了它。您为什么不将此评论移至答案,以便我可以接受重启后一切顺利吗?谢谢! :)

标签: macos osx-yosemite launchd


【解决方案1】:

你应该在重启前运行守护进程:

sudo launchctl load -w /Library/LaunchDaemons/com.craig.startup.items.plist

另外设置+x权限chmod +x /Users/cliff/startup/onlaunchd并更新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.user.loginscript</string>
   <key>Program</key>
   <string>/Users/cliff/startup/onlaunchd</string>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

【讨论】:

  • 就像一个魅力,但我不能接受这个作为答案,直到 3 分钟过去了!再次感谢!
  • 哦,不,现在当我重新启动时,它似乎并没有以 root 权限运行我的脚本。当我使用你给我的 cmd 行时,它只运行 w/root。我认为启动脚本总是以 root 身份运行?我在这里错过了什么吗?
  • 您是否加密了您的主文件夹?好吧,您可以为单个用户运行脚本。如果没问题,您可以将 plist 放置到~/Library/LaunchAgents,然后设置正确的权限chown &lt;YOUR_USER&gt;:staff com.craig.startup.items.plist 并启动守护进程launchctl load -w ~/Library/LaunchAgents/com.craig.startup.items.plist。测试请退出登录。
  • 我认为我的主文件夹已加密。 (不太确定)这是一家新收购的公司拥有的 Mac,我仍然不确定正在运行哪种加密防病毒软件。 (他们添加了 McAfee 和其他一些东西。)我很困惑。如果我将它作为 LaunchAgent 运行,那么它将以我的用户权限级别运行,这是行不通的。我需要它以 root 身份运行。
  • 我正在尝试在启动时运行 kextunload 命令来禁用某些东西。这是更核心的目标。
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多