L'affaire:
J'ai besoin d'exécuter certaines commandes / scripts à certains intervalles de temps et pour cela, j'ai deux options:
- mettre en place un
cron
-job - implémenter une boucle avec
sleep
dans le script lui-même.
Question:
Quelle est la meilleure option du point de vue de la consommation des ressources, pourquoi? Est-ce cron
la meilleure façon? Cron utilise-t-il une sorte de déclencheurs ou quelque chose qui le rend efficace par rapport à l'autre? Quelle procédure cron utilise-t-elle pour vérifier et démarrer les travaux?
La principale différence que vous recherchez est qu'elle
cron
ne fonctionne pas constamment. Comme expliqué dansman cron
:En d'autres termes,
cron
ne sera démarré qu'une fois par minute et il testera s'il doit être exécuté. Votre approche de sommeil, d'autre part, nécessiterait votresleep
commande réelle , votre shell, votre terminal et lewhile
boucle (ou autre) soient exécutés en même temps.Même s'ils lançaient le même nombre de processus, ce
cron
serait mieux. Il est écrit précisément pour cela par des gens qui ont tendance à être très bons dans leur travail. Il est destiné à en faire un meilleur travail qu'une simple boucle shell.la source
La différence vient du fait que lorsque vous ajoutez plus de scripts qui doivent dormir, vous vous retrouverez avec plus de processus en attente, au lieu d'un seul processus (cron) qui se réveille et exécute les scripts planifiés qui se ferment ensuite jusqu'à la prochaine exécution. Cron permet un processus spécialisé pour exécuter d'autres scripts à temps, plus cron vous permet de planifier relativement librement quand quelque chose doit être exécuté, les jours de la semaine ou du mois, des heures spécifiques, ou toutes les 5 minutes, etc.
* Le simple fait de revoir cela m'a fait penser à un autre avantage de cron. Tous les scripts qui s'exécutent périodiquement sont alors au même endroit, et il est facile de vérifier à partir de là quand et à quelle fréquence ils s'exécuteront. Sinon, vous devez vérifier les scripts individuels.
la source
Il existe déjà de bonnes réponses plus éclairées, mais je voulais simplement souligner qu'avec
sleep
, vous avez la possibilité de geler le processus pendant une durée variable, par exemple en fonction de certaines autres variables.Si j'écris un script pour vérifier le pourcentage de batterie qui reste et
notify-send
s'il est en dessous du niveau critique prédéfini, je peux faire le scriptsleep
pour la durée qui est fonction du niveau de batterie actuel en pourcentage au lieu de vérifier la batterie tous les une ou deux minutes avec l'aide de cron même quand je sais que c'était 80% lors de la dernière vérification.Battery_notify.sh
la source
L'utilisation
sleep
au lieu decron
pour un seul travail peut être plus efficace. Mais comme vous avez généralement encron
cours d' exécution dans tous les cas, son utilisation est gratuite ou assez proche car cela ne fait aucune différence. Donc, à moins que vous ne soyez sur uncron
système embarqué autrement libre, je choisiraiscron
.la source