J'ai un cronjob qui s'exécute toutes les heures et qui prend parfois trop de temps à exécuter, est-il possible de définir un temps d'exécution maximal et le travail est tué s'il dépasse cela?
C'est sur un serveur Ubuntu 10.04.
Merci, jebw
Essayez la timeout
commande. Par exemple:
0 * * * * timeout -2 3540 /path/to/your_command.sh
enverra un SIGINT à votre commande s'il ne s'est pas terminé dans 59 minutes.
usage: timeout [-signal] time command...
timeout: /usr/bin/timeout
Nan. La façon dont nous le faisons est de créer un script avec un fichier de verrouillage et de faire vérifier ce fichier de verrouillage avant de recommencer, afin qu'il puisse vérifier s'il est déjà en cours d'exécution et décider s'il s'exécute, s'il attend que l'autre fin ou s'il tue l'autre avant de courir.
Un fichier de verrouillage est simplement un fichier vide ou un fichier avec l'autre script
PID
enregistré quelque part comme/var/run
ou/var/lock
.la source
la réponse de cakemox est la meilleure. Sinon, mettez simplement le pid dans un fichier ou utilisez killall sur un autre cronjob une minute plus tôt pour tuer le processus.
la source