agente Launchd no iniciar
Pregunta
Estoy intentando escribir una launchd agent
que se ejecuta una sencilla aplicación para cada usuario que inicia sesión en el sistema Mac OS X.
He creado un archivo llamado com.mycompany.myapp.plist
y lo colocó en /Library/LaunchAgents
. El contenido de ese archivo son:
{
LimitLoadToSessionType = "Aqua";
StartInterval = 10;
OnDemand = NO;
KeepAlive = YES;
RunAtLoad = YES;
Label = "com.mycompany.myapp";
Program = "/Users/thomi/myapp";
ProgramArguments = (
"/Users/thomi/myapp",
"-l",
"-d",
);
}
Al principio yo no tenía el conjunto de claves StartInterval
, ya que pensamos que el agente se iniciaría automáticamente. El problema es que el agente no se inicia a menos expido manualmente los dos comandos siguientes:
launchctl load -S Aqua -D all
launchctl start com.mycompany.myapp
firther, cuando corro launchctl list com.mycompany.myapp
me sale el siguiente resultado:
{
"Label" = "com.mycompany.myapp";
"LimitLoadToSessionType" = "System";
"OnDemand" = true;
"LastExitStatus" = 0;
"TimeOut" = 30;
"Program" = "/Users/thomi/myapp";
ProgramArguments = (
"/Users/thomi/myapp",
"-l",
"-d",
);
};
Tenga en cuenta que el parámetro LimitLoadToSessionType
ha cambiado.
Me estoy perdiendo algo aquí? ¿Existe un mecanismo diferente para comenzar a agentes de este tipo? ¿Por qué ha cambiado la propiedad LimitLoadToSessionType
?
Solución 2
Encontrado el problema - al parecer launchd
no funciona correctamente con los archivos plist
de estilo antiguo. Se carga bien, pero no se ejecutará nada. Volver a crear el archivo de arriba como un archivo XML
nuevo estilo resolvió el problema.
Otros consejos
No estoy seguro si es el problema, pero creo que no se debe incluir tanto una OnDemand / RunAtLoad y KeepAlive juntos. Según tengo entendido la documentación, la clave KeepAlive reemplaza el combo OnDemand / RunAtLoad.
http://developer.apple.com/mac /library/technotes/tn2005/tn2083.html#SECCODINGRECOMMENDATIONS