1 votes

Crontab répète toutes les 15 minutes

Mon cronjob se répète toutes les 15 minutes et je ne sais pas pourquoi.

Voici le fichier crontab avec les commandes réelles remplacées :

# m h  dom mon dow   command
# Comment
0 9 * * * command arg1
0 14 * * * command arg1
0 19 * * * command arg1
0 1 * * * command arg1
#0 19 * * * command arg1
#0 22 * * * command arg1

J'ai modifié la crontab et redémarré le serveur. Tout a démarré comme prévu. Mais il a continué à répéter la commande toutes les 15 min. Ma commande est un sh script qui utilise wget pour démarrer le service web.

J'ai l'impression que la crontab répète la commande qui a échoué au bout de 15 minutes (wget échoue la plupart du temps car le service web nécessite plus d'une minute pour s'exécuter). Ai-je raison ? Et comment corriger ce problème ?

4voto

Cron ne réessaie pas les tâches. Il exécute simplement des commandes selon un calendrier. Il ne se soucie pas nécessairement de leur réussite ou de leur échec. cron n'impose pas non plus de délais d'exécution.

Vous pouvez vérifier votre syslog et /var/log/cron (du moins, c'est là qu'il se trouve sur les systèmes de type RedHat).

De même, si l'utilisateur propriétaire de la crontab ne reçoit pas de messages électroniques concernant la sortie de la commande wget, insérez un MAILTO=you@your.email.address afin d'avoir une meilleure idée de ce qui se passe lors de l'exécution de la commande.

Voir :

man 5 crontab

...pour plus de détails sur certains des autres paramètres qui peuvent être configurés pour la crontab de l'utilisateur.


Extrait de la page d'accueil de WGET

Lorsqu'il interagit avec le réseau, Wget peut vérifier le délai d'attente et interrompre l'opération si elle prend trop de temps. Cela permet d'éviter les anomalies telles que les lectures suspendues et les connexions infinies. Le seul délai d'attente activé par défaut est un délai de lecture de 900 secondes. La définition d'un délai d'attente à 0 le désactive complètement. À moins que vous ne sachiez ce que vous faites, il est préférable de ne pas modifier les paramètres par défaut des délais d'attente.

1voto

rakslice Points 2526

Je suis paresseux, donc seulement deux réponses rapides.

La première est de regarder sous /etc/cron* pour voir s'il y a des choses intéressantes qui peuvent répondre à votre question.

La deuxième est de regarder dans ps aux pour voir s'il y a des processus que vous ne connaissez pas et qui sont peut-être là pour lancer votre script toutes les 15 minutes.

Puis pour une troisième, vous pouvez modifier votre script pour dire (log) de qui il est lancé, peut-être en ajoutant au début quelque chose comme ps aux | grep $PPID > /tmp/votre_script_parent_process.log.

J'ai été indulgent. Il pourrait aussi y avoir une autre réponse, peut-être que la commande est exécutée au moyen de la crontab d'un autre utilisateur.

Andrea

1voto

Sergej Andrejev Points 145

J'ai découvert que par défaut, wget répète la demande lorsqu'elle échoue. En ajoutant "-t 1" ou "--times=1", le problème est résolu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X