假设我有下面的脚本
#! /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遇到问题的原因是";部分未正确启动守护程序。每当出现空间时,<array>
下都需要一个新条目
因此:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>/path/to/script</string>
<string>&</string>
</array>
<key>AbandonProcessGroup</key>
<true/>