2013-09-23 5 views
1

Je veux faire une tâche toutes les 5 minutes. Je veux contrôler quand je peux commencer et quand je peux finir.script shell bash sommeil ou cronjob qui est préféré?

Une façon est d'utiliser sleep dans une boucle while while, une autre façon est d'utiliser cronjob. Lequel est préféré en termes de performance?

Merci!

Répondre

2

cron est presque toujours la meilleure solution.

Si vous essayez de le faire vous-même avec un simple script en cours d'exécution dans une boucle while:

while true; do 
    task 
    sleep 300 
done 

vous trouvez finalement que rien ne se passe parce que votre tâche a échoué en raison d'une erreur passagère. Ou le système a redémarré. Ou certains tels. Rendre votre script assez robuste pour faire face à toutes ces éventualités est un travail difficile et inutile. C'est pour ça que cron est, après tout.

De même, si la tâche prend une durée non négligeable, la boucle while simple d'esprit ci-dessus se désynchronise lentement avec l'horloge. Cela pourrait être corrigé:

while true; do 
    task 
    sleep $((300 - $(date +%s) % 300)) 
done 

Encore une fois, ça ne vaut pas le coup puisque cron le fera aussi pour vous. Cependant, cron ne vous sauvera pas du lancement de la tâche avant la fin de l'invocation précédente, si l'invocation précédente s'est bloquée d'une manière ou d'une autre. Ce n'est donc pas un trajet complètement gratuit, mais cela vous procure encore plus de robustesse.

Une approche simple pour résoudre le problème de tâche bloquée consiste à utiliser l'utilitaire flock. Par exemple, vous pouvez cron un script contenant les éléments suivants:

(
    flock -n 8 || { 
    logger -p user.warning Task is taking too long 
    # You might want to kill the stuck task here. See pkill 
    exit 1 
    } 
    # Do the task here 
) 8> /tmp/my_task.lck 
problème
3

Utilisez un travail cron. Cron est fait pour ce type de cas d'utilisation. Cela vous libère de devoir coder la boucle while vous-même. Toutefois, cron peut ne pas convenir si le temps d'exécution du script est imprévisible et dépasse la programmation de la minuterie. En termes de performances Il est difficile de savoir si vous partagez ce que fait le script et à quelle fréquence il le fait. Mais d'une manière générale, aucune option ne devrait avoir un impact négatif sur la performance.

+1

avec Cron est que vous devez vérifier si l'exécution précédente est terminée. – michael501

+0

@michael merci, édité –

Questions connexes