launchd:bash命令不运行

时间:2014-11-07 02:12:36

标签: macos bash launchd

在意识到OS X没有提供直接的解决方案来安排任务之后,我仍然有点动摇。也许这就是为什么我无法找到推出plist问题的原因。我认为这将是一项轻松的任务,经过一段时间的阅读后我来了:

Frost:~ ren$ cat /Library/LaunchDaemons/org.mvps.hosts.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>org.mvps.hosts</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>curl -s http://winhelp2002.mvps.org/hosts.txt | grep \"^0\.0\.0\.0\|^127\.0\.0\.1\|^::1\" &gt; /etc/hosts</string>
    </array>
    <key>StartInterval</key>
    <integer>86400</integer>
</dict>
</plist>

但是对于世界上的一切我无法理解为什么在加载和启动后/ etc / hosts没有更新。命令本身有效,所以问题可能在于格式化或转义..?无论它指向什么,我都没有找到任何方式获得任何其他领导,而不是启动列表状态127。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

这就是我最终的结果:

Frost:~ ren$ cat /Library/LaunchDaemons/org.mvps.hosts.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>org.mvps.hosts</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>bash -c "curl -s http://winhelp2002.mvps.org/hosts.txt | grep \"^0\.0\.0\.0\|^127\.0\.0\.1\|^::1\" &gt; /etc/hosts"</string>
    </array>
    <key>StartInterval</key>
    <integer>86400</integer>
</dict>
</plist>
坦率地说,我不知道为什么我要打电话给bash来打电话给bash来运行命令,这是在launchd上运行内部工作的东西,无论如何我都不喜欢。它现在有效。

答案 1 :(得分:0)

您是否尝试过使用bash和/或curl和/或grep的绝对路径? 即/ bin / bash / usr / bin / curl或他们留在你的fs的哪个地方?