0

假设我有下面的脚本

#! /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分钟启动一次脚本,不管它是否完成?

4

1 回答 1

1

我没有对此进行测试,但是您应该能够让启动代理在后台运行脚本,如下所示:

<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 “有用地”杀死任何剩余的子进程(如您的实际脚本)。

于 2019-11-06T00:06:09.817 回答