Tengo un plist
para que se ejecute en un intervalo determinado, y lo he puesto en /Library/LaunchDaemons así:
/Library/LaunchDaemons $ ll macports_update_notifier.plist
lrwxr-xr-x 1 root wheel 55B 5 Sep 13:47 macports_update_notifier.plist@ -> /Users/seron/bin/macports/macports_update_notifier.plist
El problema es que parece que no se ejecuta. Aquí está el plist:
<?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>EnvironmentVariables</key>
<dict>
<key>HOME</key>
<string>/Users/seron</string>
</dict>
<key>Label</key>
<string>macports_update_notifier</string>
<key>ProgramArguments</key>
<array>
<string>/Users/seron/bin/macports/macports_notificaton.sh</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
</dict>
</plist>
Lo cargué con sudo launchctl load -w /Library/LaunchDaemons/macports_update_notifier.plist
.
Esto es lo que sudo launchctl list macports_update_notifier
produce:
{
"Label" = "macports_update_notifier";
"LimitLoadToSessionType" = "System";
"OnDemand" = true;
"LastExitStatus" = 0;
"TimeOut" = 30;
"ProgramArguments" = (
"/Users/seron/bin/macports/macports_notificaton.sh";
);
};
El script se ejecuta en aproximadamente un segundo y funciona bien cuando se ejecuta solo. Es necesario que se ejecute como Root.
Estoy usando OS X 10.8.1. ¿Cuál podría ser el problema?
editar:
Mi script se ejecuta terminal-notificador que es la herramienta de línea de comandos para mostrar las notificaciones en Mountain Lion y aquí es donde el demonio se escapa.
#!/bin/sh
/opt/local/bin/terminal-notifier -message 'output' -group 'debug'
He descubierto que el demonio funciona bien si no se carga con sudo
. Una diferencia es que launchctl load test.plist
informa "LimitLoadToSessionType" = "Aqua"
en lugar de "System"
. Sin embargo, si establezco LimitLoadToSessionType
a Aqua
en el plist y cargar con sudo
launchctl
se niega a cargarlo mostrando nothing found to load
. Sin embargo, necesita ejecutarse como Root porque actualiza la base de datos de macports.
actualización
Creo que he encontrado la razón por la que una GUI no puede ser lanzada por un demonio; Biblioteca para desarrolladores de Mac, demonios y agentes . Un agente puede hacerlo. En mi caso, necesita comunicarse con el demonio para mostrar información cada vez que el demonio haya actualizado los macports. Ahora la pregunta es, ¿Cómo hago para que el agente pregunte y el demonio responda?