Sto cercando di risolvere un problema con uno script bash che viene chiamato da launchd. Ecco un breve riassunto
- Chiamare lo script manualmente da solo funziona bene senza errori.
- All'interno dello script bash chiama un AppleScript che pubblica una notifica che AppleScript funziona bene.
- Il
.plist
viene caricato e prende il via all'intervallo corretto e chiama lo script bash. In modo che funzioni correttamente - Il
.plist
viene chiamato da/Library/LaunchDaemons
(quindi può essere eseguito indipendentemente dal fatto che qualcuno abbia effettuato l'accesso o meno). Ciò significa che tutto viene eseguito come root.
Il problema si verifica all'interno dello script bash che chiama un AppleScript per pubblicare una notifica, ma non succede mai.
#!/bin/bash
# ------------------------------------------------------------------
sleep 11
echo "This is a test" > test.txt
/usr/bin/osascript /Users/allan/Documents/Scripts/AppleScript/notify.scpt "This is a test" "-Test Test Test" "nosound"
exit 0
Questo è tutto. Un breve riassunto di ciò che sto facendo:
-
sleep 11
- launchd ha bisogno di un minuto. di 10 secondi di tempo di esecuzione del programma per impostazione predefinita. L'ho messo qui per sistemare launchd -
echo "This is a test"
- Scrivo semplicemente una semplice stringa in un file di testo per assicurarmi che lo script di bash venga richiamato. Questo file viene creato con la stringa prevista ; questo funziona. -
/usr/bin/osascript /Users......blah blah blah...
questo fallisce . Questo è solo un semplice AppleScript che accetta tre argomenti (corpo, titolo e suono) per fornire una notifica.
Eseguendo da solo o script bash che lo chiama, funziona:
Quandoloscriptdibashvienechiamatodalaunchdsembranonfunzionare.Qualcunopuòindicarmilagiustadirezione?Cosamimanca?
(OSX10.11.6)
Questoèil.plist
chestousando(sì,socheèimpostatoperunintervallodi45secondi...stotestando)
<?xmlversion="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.user.podcastCleanup</string>
<key>Program</key>
<string>/Users/allan/Documents/Scripts/Unix/podcastCleanup.sh</string>
<key>StartInterval</key>
<integer>45</integer>
<key>WorkingDirectory</key>
<string>/Users/allan/Documents</string>
</dict>
</plist>
Di seguito è riportato il
notify.scpt
AppleScript utilizzato per generare la notifica.
on run argv
set Message to item 1 of argv
set Title to item 2 of argv
set aud to item 3 of argv
set STitle to "Terminal"
set Snd to "Blow.aiff"
if (aud = "sound") then
display notification Message with title Title subtitle STitle sound name Snd
else
display notification Message with title Title subtitle STitle
end if
end run