Я создал скрипт для обновления моего менеджера пакетов и отправки уведомления через терминал-уведомитель. При запуске вручную он работает нормально, но при вызове через launchd (локально для пользователя, в ~/Library/LaunchAgents/), терминал-уведомитель, по-видимому, не запускается. Это не висит, однако; последующие части скрипта запускаются, как и ожидалось. Ничего не производится на stdout/stderr. Я использую абсолютные пути во всем, так что это не проблема с точки зрения выполнения вручную или запуска. Я уверен, что это просто еще одна глупость при запуске, но есть ли способ ее преодолеть?

Агент запуска

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.brew.autobrew</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/[USERNAME]/.scripts/autobrew.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Minute</key><integer>0</integer>
        <key>Hour</key><integer>22</integer>
    </dict>
    <key>AbandonProcessGroup</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/autobrew_launchd.log</string>
    <key>StandardErrorPath</key>
    <string>/dev/autobrew_launchd.log</string>
</dict>
</plist>

Соответствующая строка кода в autobrew.sh

/usr/local/bin/terminal-notifier -title "Homebrew updates" -sound default

1 ответ1

0

У меня была такая же проблема, и я не мог ее решить. Я наконец вспомнил, что читал в README.markdown терминала-уведомителя, что:

Чтобы использовать терминал-уведомитель, вы должны вызвать двоичный файл внутри пакета приложения.

Поэтому я отредактировал свой скрипт для вызова /Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier вместо /usr/local/bin/terminal-notifier и это решило проблему. Хотя /usr/local/bin/ исполняемый файл работает нормально, когда скрипт вызывается из интерактивной оболочки, по какой-то причине launchd должен использовать версию, инкапсулированную в /Applications/terminal-notifier.app для правильной работы.

(Обратите внимание, что если вы устанавливаете terminal-notifier с Homebrew, вам нужно будет обязательно запустить brew linkapps чтобы создать необходимую символическую ссылку в папке «Приложения», для каждого brew info terminal-notifier .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .