Ошибка запуска сценария оболочки запуска

Я пытаюсь использовать Launchd для запуска следующего сценария оболочки:

#!/bin/sh

## wait for sunset, touch file

NIGHTTIME='/Users/mnewman/Documents/webcam/nighttime.txt'

sunwait civ down  14.98N 102.09E
touch "$NIGHTTIME"

"sunwait" - исполняемый файл, который работает в фоновом режиме и ждет заката / восхода солнца, а затем завершает работу. В этом случае я настраиваю его на ожидание заката гражданского сумерка в моем географическом местоположении.

Если я запускаю этот скрипт из командной строки, он работает нормально. Если я запускаю его с помощью Launchd, команда touch запускается до завершения sunwait. Мне нужно закончить sunwait перед выполнением следующей строки. Как мне это сделать?

1 ответ

Наиболее вероятным случаем здесь является то, что у вас есть sunwait установлен в месте, которое не находится в launchd PATH, Решение состоит в том, чтобы просто указать PATH использовать в вашем сценарии - и, в качестве меры безопасности, сказать вашему сценарию не создавать файл, если sunwait выходит из строя.

#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:/opt/local/bin
nighttime=/Users/mnewman/Documents/webcam/nighttime.txt

sunwait civ down  14.98N 102.09E || exit
touch "$nighttime"

Изменение линии Шебанга на #!/bin/sh -e также приведет к тому, что скрипт будет освобожден рано, если sunwait не удалось запустить, хотя с помощью set -e имеет значительные предостережения (задокументировано в BashFAQ # 105).

Другие вопросы по тегам