¿LaunchAgent evita la ejecución repetitiva de trabajos?

2

Quiero automatizar la ejecución de un trabajo de larga duración. Se debe iniciar una vez al día, pero solo si el trabajo anterior no se está ejecutando. ¿Puedo lograr esto con launchd y cómo?

    
pregunta Ortwin Gentz 24.06.2013 - 19:02

1 respuesta

2

Sí, launchd le garantiza que solo tiene una instancia del "agente" en ejecución y lo hace automáticamente. Configure su trabajo normalmente usando StartInterval para programar la ejecución de su trabajo en segundo plano y el sistema no iniciará una nueva instancia si la instancia anterior no se ha completado en el momento en que llega a ese intervalo de inicio programado.

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

Aquí hay un ejemplo de lista:

<?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 período de tiempo, y solo iniciará una nueva instancia en la marca de tiempo de 420 segundos. .

El texto en la launchd.plist ( 5) la página de manual dice lo mismo, pero la forma en que está escrita de alguna manera lo hace poco obvio:

  

StartInterval

     

Esta tecla opcional hace que el trabajo se inicie   cada N segundos Si el sistema está dormido, el trabajo se iniciará el   La próxima vez que la computadora se despierte. Si transcurren múltiples intervalos   antes de que la computadora se despierte, esos eventos se unirán en uno   evento tras despertar del sueño.

La última oración dice esencialmente " launchd hace que tus trabajos sean individuales para ti siempre y cuando siga las reglas para un buen comportamiento laboral ".

    
respondido por el Ian C. 24.06.2013 - 19:46

Lea otras preguntas en las etiquetas