Получение Launchd для многократного запуска сценария, не дожидаясь завершения предыдущего запуска в OSX - PullRequest
0 голосов
/ 05 ноября 2019

Допустим, у меня есть скрипт ниже

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

Когда я настраиваю агент запуска для запуска этого скрипта каждые 2 минуты ... launchd будет ждать завершения скрипта, прежде чем снова его запускать. Поэтому вместо даты каждые 2 минуты (после 300-секундного сна) я получаю ее каждые 5 минут или больше. Существует ли способ запуска скрипта каждые 2 минуты, независимо от того, завершился он или нет?

1 Ответ

1 голос
/ 06 ноября 2019

Я не проверял это, но вы должны иметь возможность запустить агент запуска в фоновом режиме, что-то вроде этого:

<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 любых оставшихся подпроцессов (например, вашего реального скрипта) при выходе из процесса, который он рассматривает как процесс демона.

...