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?
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?
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 ".
Lea otras preguntas en las etiquetas launchd automation cron