terminal-notifier falha silenciosamente quando chamado do launchd

0

Eu criei um script para atualizar meu gerenciador de pacotes e postar uma notificação via notificador de terminal. Quando executado manualmente, funciona bem, mas quando chamado via launchd (local para o usuário, em ~ / Library / LaunchAgents /), o notificador de terminal aparentemente não inicia. Ele não se pendura, no entanto; partes posteriores do script são executadas conforme o esperado. Nada é produzido em stdout / stderr. Eu estou usando caminhos absolutos em tudo, então esse não é o problema em termos de execução manual vs. execução do launchd. Tenho certeza de que este é apenas mais um truque estúpido do launchd, mas existe alguma maneira de superá-lo?

Agente de lançamento

<?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>

A linha de código relevante em autobrew.sh

/usr/local/bin/terminal-notifier -title "Homebrew updates" -sound default
    
por user3145309 28.03.2014 / 05:14

1 resposta

0

Eu estava tendo o mesmo problema e não consegui descobrir. Eu finalmente me lembrei de ler em README.markdown do terminal-notifier que:

In order to use terminal-notifier, you have to call the binary inside the application bundle.

Então, editei meu script para chamar /Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier em vez de /usr/local/bin/terminal-notifier e resolvi o problema. Enquanto o /usr/local/bin/ executável funciona bem quando o script é chamado a partir do shell interativo, por algum motivo launchd precisa usar a versão encapsulada dentro de /Applications/terminal-notifier.app para funcionar corretamente.

(Note que se você instalar terminal-notifier com Homebrew, você terá que executar brew linkapps para criar o link simbólico necessário na sua pasta Aplicativos, por brew info terminal-notifier .)

    
por 14.11.2014 / 19:33