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

Macos 正在启动以重复运行脚本,而无需等待上一次启动在OSX中完成,macos,launchd,launchdagent,Macos,Launchd,Launchdagent,假设我有下面的脚本 #! /bin/bash sleep 300 dt=$(date '+%Y/%m/%d %H:%M:%S') echo $dt >> /foo/bar/test.txt 当我设置launchagent每2分钟触发一次脚本时。。。launchd将等待脚本完成,然后再次触发它。因此,我不是每2分钟约会一次(睡了300秒后),而是每5分钟或更长时间约会一次。launchd是否有办法每2分钟启动一次脚本,而不管脚本是否已完成?我还没有测试过这一点,但您应该能够让laun

假设我有下面的脚本

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

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

我还没有测试过这一点,但您应该能够让launch agent在后台运行脚本,如下所示:

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

</array>
<key>AbandonProcessGroup</key>
<true/>
编程参数
/bin/bash
-c
/路径/到/脚本&
放弃进程组

注意:如果需要向脚本传递任何参数,请将它们包含在与脚本路径相同的
中,并用空格分隔(而不是像通常在启动守护程序文件中那样作为单独的
s)。需要使用
放弃进程组
键来防止launchd在其认为的守护进程退出时“有益地”杀死任何剩余的子进程(如您的实际脚本)。

我只是在理论脚本上测试了这一点,但它并没有完全起作用。但是,我添加了一个“触发器”脚本,并将您的plist指向该脚本。该脚本执行test.sh并以
&
结束。现在,我会根据需要每2分钟获取一次日志条目。不确定是否有更优雅的方式来实现这一点