假设我有下面的脚本
#! /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分钟启动一次脚本,不管它是否完成?
假设我有下面的脚本
#! /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>
像通常在启动守护程序文件中那样作为单独的 s)。当它认为守护进程退出时,需要该AbandonProcessGroup
密钥来防止 launchd “有用地”杀死任何剩余的子进程(如您的实际脚本)。