让Launchd在OSX中重复运行脚本,而无需等待上一次启动完成



假设我有下面的脚本

#! /bin/bash
sleep 300
dt=$(date '+%Y/%m/%d %H:%M:%S')
echo $dt >> /foo/bar/test.txt

当我设置启动以每2分钟触发此脚本时。。。launchd将等待脚本完成,然后再触发它。所以我不是每2分钟约会一次(睡了300秒(,而是每5分钟或更长时间约会一次。launchd有没有办法每2分钟启动一次脚本,不管它是否已经完成?

我还没有测试过这个,但你应该能够让启动代理在后台运行脚本,比如这样:

<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>/path/to/script &</string>
</array>
<key>AbandonProcessGroup</key>
<true/>

注意:如果需要向脚本传递任何参数,请将它们包含在与脚本路径相同的<string>中,并用空格分隔(而不是像通常在启动守护程序文件中那样作为单独的<string>(。需要AbandonProcessGroup密钥来防止launchd在后台进程退出时"有益地"杀死任何剩余的子进程(如实际脚本(。

Gordon的答案是几乎完美——这对他来说是个道具。

arlovande遇到问题的原因是&quot;部分未正确启动守护程序。每当出现空间时,<array>下都需要一个新条目

因此:

<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>/path/to/script</string>
<string>&</string>
</array>
<key>AbandonProcessGroup</key>
<true/>

相关内容

  • 没有找到相关文章

最新更新