Tengo un cronjob que se ejecuta cada hora y que ocasionalmente tarda demasiado en ejecutarse, ¿hay alguna forma de establecer un tiempo de ejecución máximo y el trabajo se mata si excede eso?
Esto está en un servidor Ubuntu 10.04.
Gracias jebw
Prueba el timeout
comando. Por ejemplo:
0 * * * * timeout -2 3540 /path/to/your_command.sh
enviará un SIGINT a su comando si no se ha completado en 59 minutos.
usage: timeout [-signal] time command...
timeout: /usr/bin/timeout
No La forma en que lo hacemos es crear un script con un archivo de bloqueo y hacer que el script compruebe ese archivo de bloqueo antes de comenzar a ejecutar nuevamente, para que pueda verificar si ya se está ejecutando y decidir si se ejecuta, si espera a que el otro lo haga. final o si mata al otro antes de correr.
Un archivo de bloqueo es solo un archivo vacío o un archivo con el otro script
PID
guardado en algún lugar como/var/run
o/var/lock
.fuente
La respuesta de cakemox es la mejor. De lo contrario, simplemente coloque el pid en un archivo o use killall en otro cronjob un minuto antes para finalizar el proceso.
fuente