Ошибка запуска сценария оболочки запуска
Я пытаюсь использовать 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).