Estoy tratando de solucionar un problema con un script de bash al que launchd llama. Aquí hay un breve resumen
- Llamar el script manualmente solo funciona bien sin errores.
- Dentro del script de bash, llama a AppleScript que publica una notificación de que AppleScript funciona bien.
- El
.plist
se carga y comienza en el intervalo correcto y llama al script de bash. Así que eso funciona correctamente. - Se llama a
.plist
desde/Library/LaunchDaemons
(por lo que puede ejecutarse independientemente de si alguien ha iniciado sesión o no). Esto significa que todo se ejecuta como root.
El problema se produce dentro de la secuencia de comandos de bash que llama a un AppleScript para publicar una notificación, simplemente nunca sucede.
#!/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
Eso es todo. Un breve resumen de lo que estoy haciendo:
-
sleep 11
- launchd necesita un min. De 10 segundos de tiempo de ejecución del programa por defecto. Acabo de poner esto aquí para acomodar a launchd -
echo "This is a test"
: solo escribo una cadena simple en un archivo de texto para asegurarme de que se llame al script bash. Este archivo se crea con la cadena esperada ; esto funciona. -
/usr/bin/osascript /Users......blah blah blah...
esto falla . Esto es solo un simple AppleScript que toma tres argumentos (cuerpo, título y sonido) para proporcionar una notificación.
Al ejecutarse por sí mismo o bash script que lo llama, funciona:
Cuandosellamaalscriptbashdesdelaunchdparecequesimplementenofunciona.¿Alguienpuedeseñalarmeenladireccióncorrecta?¿Quémeestoyperdiendo?
(OSX10.11.6)
Esteesel.plist
queestoyusando(sí,séqueestáconfiguradoparaunintervalode45segundos...estoyprobando)
<?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>
A continuación se muestra el
notify.scpt
de AppleScript que se utiliza para generar la notificación.
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