Tengo un plist
configurado para ejecutarse en un intervalo establecido, y lo puse 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 no parece ejecutarse. Aquí está la lista:
<?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. Necesita ejecutarse como root.
Estoy usando OS X 10.8.1. ¿Cuál podría ser el problema?
edit:
Mi script ejecuta notificador de terminal que es una herramienta de línea de comandos para mostrar notificaciones en Mountain Lion y aquí es donde el demonio fianzas.
#!/bin/sh
/opt/local/bin/terminal-notifier -message 'output' -group 'debug'
Encontré que el daemon funciona bien si no está cargado con sudo
. Una diferencia es que launchctl load test.plist
informa "LimitLoadToSessionType" = "Aqua"
en lugar de "System"
. Sin embargo, si configuro LimitLoadToSessionType
a Aqua
en el plist y cargo con sudo
launchctl
se niega a cargarlo mostrando nothing found to load
. Sin embargo, debe ejecutarse como root porque actualiza la base de datos de macports.
actualizacion
Creo que he encontrado la razón por la que un demonio no puede iniciar una GUI; Mac Developer Library, Daemons and Agents . Un agente puede hacer eso. En mi caso, necesita comunicarse con el daemon para mostrar información cada vez que el daemon haya actualizado macports. Ahora la pregunta es: ¿Cómo hago que el agente pregunte y el daemon responda?