Estoy tratando de solucionar un problema con un script en bash que se llama por launchd. He aquí un resumen rápido
- Llamar el script manualmente por sí funciona correctamente, sin errores.
- Dentro de la secuencia de comandos bash llama a un AppleScript que envía una notificación de Que AppleScript funciona bien.
- El
.plist
se carga y se inicia en el intervalo correcto y se llama a la secuencia de comandos bash. Para que funcione correctamente - El
.plist
desde/Library/LaunchDaemons
(por lo que se puede ejecutar sin importar si alguien está conectado o no). Esto significa que todo se ejecuta como root.
El problema se produce dentro de la bash script que llama a un AppleScript para publicar una notificación - esto 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 resumen rápido de lo que yo estoy haciendo:
-
sleep 11
- launchd necesidades de un min. de 10 segundos de programa de tiempo de ejecución por defecto. Acabo de poner esto aquí para dar cabida a launchd -
echo "This is a test"
- Acabo de escribir una simple cadena de caracteres en un archivo de texto para asegurarse de que el script de bash que está recibiendo la llamada. Este archivo se crea con la cadena esperada; esto funciona. -
/usr/bin/osascript /Users......blah blah blah...
esta falla. Esto es sólo un sencillo AppleScript que toma tres argumentos (el cuerpo, el título, y el sonido) para proporcionar una notificación.
Ejecutar por sí mismo o un script de bash que se llama, funciona:
Cuando el script de bash que se llama desde launchd parece que no sólo el trabajo. Puede alguien me apunte en la dirección correcta? Lo que me estoy perdiendo?
(OS X 10.11.6)
Esta es la .plist
estoy usando (sí, sé que se trata de un set de 45 segundos de intervalo...estoy probando)
<?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.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>
El siguiente es el notify.scpt
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