2 votos

¿Evita LaunchAgent la ejecución repetitiva de trabajos?

Quiero automatizar la ejecución de un trabajo de larga duración. Debe lanzarse una vez al día, pero sólo si el trabajo anterior no está todavía en ejecución. ¿Puedo lograr esto con launchd y cómo?

2voto

shsteimer Puntos 8749

Sí, launchd asegura que sólo tiene una instancia del "agente" en ejecución y lo hace por usted automáticamente. Configure su trabajo de forma normal utilizando StartInterval para programar la ejecución de su trabajo en segundo plano y el sistema no lanzará una nueva instancia si la instancia anterior no se ha completado al llegar a ese intervalo de inicio programado.

Si pasan varios intervalos de programación, launchd ejecutará sólo una nueva instancia en el siguiente intervalo. Es "inteligente" al respecto.

Aquí hay un ejemplo de plist:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd  
"> 
<plist version="1.0"> 
<dict> 
     <key>Label</key> 
     <string>com.mycompany.test</string> 
     <key>ProgramArguments</key> 
     <array> 
         <string>/some/path/to/a/script.sh</string> 
     </array> 
     <key>StartInterval</key> 
     <integer>60</integer> 
</dict> 
</plist>

En el ejemplo anterior, si /some/path/to/a/script.sh tarda 361 segundos en ejecutarse, launchd no iniciará 5 nuevas instancias durante ese lapso de tiempo, y sólo iniciará una nueva instancia en la marca de 420's segundos en el tiempo.

El texto de la página man de launchd.plist(5) lo dice, pero la forma en que está escrito no lo hace evidente:

StartInterval

Esta tecla opcional hace que el trabajo se inicie cada N segundos. Si el sistema está dormido, el trabajo se iniciará la siguiente vez que el ordenador se despierte. Si transcurren varios intervalos antes de que el ordenador se despierte, esos eventos se unirán en un evento evento al despertar del sueño.

Esa última frase dice esencialmente " launchd hace que tus trabajos sean singleton para ti siempre y cuando seguir las normas de buen comportamiento en el trabajo ".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X