GNU/Linux >> Tutoriels Linux >  >> Linux

Puis-je exécuter une tâche cron plus fréquemment que toutes les minutes ?

Solution 1 :

Candidat pour le plus créatif abus d'une commande Linux :

nohup watch -n 30 --precise yourprog >/dev/null &

Si yourprog se compose de :

date +%M.%S.%N >> yourprog.out

puis yourprog.out pourrait ressembler à :

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

indiquant un assez bon niveau de précision.

Voici une explication des parties de la commande :

  • nohup - Cela garde la commande qui le suit, watch dans ce cas, de quitter lorsque le terminal quitte.
  • watch - Ce programme exécute une commande à plusieurs reprises. Normalement, le premier écran de sortie de la commande est affiché à chaque fois watch exécute la commande.
  • -n 30 - L'intervalle auquel exécuter la commande. Dans ce cas, c'est toutes les trente secondes.
  • --precise - Sans cette option, watch exécute la commande après intervalle secondes. Avec lui, chaque démarrage de la commande commence sur l'intervalle si possible. Si cette option n'était pas spécifiée dans l'exemple, les temps seraient de plus en plus tardifs de plus de 30 secondes à chaque fois en raison du temps nécessaire pour lancer et exécuter la commande (yourprog ).
  • yourprog - Le programme ou la ligne de commande pour watch éxécuter. Si la ligne de commande contient des caractères spéciaux pour le shell (par exemple, espace ou point-virgule), il faudra les mettre entre guillemets.
  • >/dev/null - Le supérieur à redirige la sortie de la commande exécutée par watch dans un fichier, /dev/null . Ce fichier supprime toutes les données qui y sont écrites. Cela empêche la sortie d'être écrite à l'écran ou, depuis nohup est utilisé, il empêche l'envoi de la sortie vers un fichier appelé nohup.out .
  • & - Le watch la commande est exécutée en arrière-plan et le contrôle est rendu au terminal ou au processus parent.

Notez que nohup , la redirection de sortie et le & l'opérateur de contrôle en arrière-plan n'est pas spécifique à watch .

Voici une explication de l'exemple yourprog script :

  • date - Affiche la date et/ou l'heure actuelle. Il peut également les définir.
  • +%M.%S.%N - Cela spécifie le format de sortie pour date utiliser. %M est la minute actuelle, %S est la seconde actuelle et %N est la nanoseconde actuelle.
  • >> yourprog.out - Cela redirige la sortie du date commande dans un fichier appelé yourprog.out . Le double supérieur à entraîne l'ajout de la sortie au fichier à chaque appel plutôt que le contenu précédent en cours d'écrasement.

Modifier :

Peut-être une autre chose qui pourrait être abusée (ou peut-être que c'est une utilisation légitime) est les minuteries systemd.

Voir systemd/Timers en remplacement de cron et Cron vs systemd timers.

J'essaierai de poster un exemple bientôt.

Solution 2 :

Si votre tâche doit être exécutée fréquemment, cron n'est pas le bon outil. Outre le fait qu'il ne lancera tout simplement pas les tâches aussi fréquemment, vous risquez également de graves problèmes si la tâche prend plus de temps à s'exécuter que l'intervalle entre les lancements. Réécrivez votre tâche pour la démoniser et l'exécuter de manière persistante, puis lancez-la à partir de cron si nécessaire (tout en vous assurant qu'elle ne se relancera pas si elle est déjà en cours d'exécution).

Solution 3 :

Cron est conçu pour se réveiller à chaque minute, il n'est donc pas possible de le faire sans un peu de piratage, par exemple dormir comme vous l'avez mentionné.

Solution 4 :

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

N'oubliez pas d'écrire quelque chose dans votre programme pour qu'il se ferme si une instance précédente est déjà en cours d'exécution.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

Bien sûr, cela laisse encore une très petite possibilité d'échec, alors recherchez sur Google une meilleure solution applicable à votre environnement.

Solution 5 :

Vous pouvez le faire avec un logiciel tiers.

Une option qui a bien fonctionné pour moi est frequent-cron

Il permet une précision à la milliseconde et vous donne la possibilité de différer l'exécution suivante jusqu'à ce que l'exécution en cours soit terminée..


Linux
  1. Comment exécuter des Cronjobs plus d'une fois par minute ?

  2. Exécution d'une tâche cron sous Linux toutes les six heures

  3. Comment exécuter le travail cron toutes les heures et 10 minutes

  4. Comment configurer le travail CRON pour qu'il s'exécute toutes les 10 secondes sous Linux ?

  5. Comment puis-je exécuter une commande après le démarrage ?

Comment exécuter des tâches Cron toutes les 5, 10 ou 15 minutes

Comment planifier une tâche dans Cron pour qu'elle s'exécute toutes les heures dans Ubuntu 20.04

Comment exécuter une tâche Crontab chaque semaine le dimanche

Comment puis-je exécuter une tâche cron toutes les 30 minutes ?

Lancer Cron toutes les 2 heures

Comment puis-je planifier une tâche cron qui s'exécute toutes les 10 secondes sous Linux ?