Je veux savoir s'il existe un moyen plus simple d'exécuter un travail toutes les 25 minutes. Dans cronjob, si vous spécifiez le paramètre minute comme * / 25, il ne s'exécutera qu'à la 25e et 50e minute de chaque heure
13
La commande dans crontab est exécutée avec /bin/sh
afin que vous puissiez utiliser l'expansion arithmétique pour calculer si la minute actuelle modulo 25 est égale à zéro:
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
exécutera l'intégralité de cette entrée toutes les 5 minutes, mais uniquement si la minute actuelle (en minutes depuis l'époque) modulo 25 est égale à zéro, elle s'exécutera your_command
.
Comme d' autres l' ont souligné, 1 jour ne sont pas divisibles par 25 minutes, cela ne fera pas de your_command
fonctionner en même temps tous les jours, mais il se passe toutes les 25 minutes.
Votre meilleur pari est de courir à 20 minutes ou 30 minutes.
Le mieux serait de déclencher toutes les 5 minutes, puis de conserver un décompte interne ou un horodatage, et d'exécuter tous les 5 déclencheurs, ou si 25 minutes se sont écoulées depuis la dernière exécution.
Plus compliqué serait de déterminer les heures correctes d'une journée, à partir de minuit, et d'accepter l'erreur à la fin de la journée. Cela impliquerait de dupliquer l'entrée crontab aux différentes heures.
Plus compliqué que cela serait de calculer les temps pour un mois entier, ce qui impliquerait de nombreuses copies de l'entrée crontab pour couvrir les différentes combinaisons.
Enfin, vous pouvez implémenter votre propre toujours sur le démon, et faire faire la planification.
la source
Je n'ai aucune expérience directe avec cela, mais fcron semble faire ce que vous voulez hors de la boîte. Selon sa documentation, vous pouvez spécifier des fréquences:
la source
@ 25 command
devrait faire l'affaire.Permettez-moi d'expliquer brièvement quel est le problème ici. La saisie de 25 dans le champ des minutes entraîne l'
cron
exécution lorsque les minutes de l'heure actuelle sont égales à 25, c'est-à-dire une fois par heure. Vous pouvez entrer une liste de correspondances, le problème est que 60 (minutes d'une heure) ne sont pas divisibles par 25, vous devez donc ajouter plusieurs entrées en fonction de l'heure. Le multiple le moins commun de 60 et 25 est 300, c'est-à-dire 5 * 60. vous devrez donc faire un cycle de 5 heures jusqu'à revenir à votre début d'origine. par exemple:0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...
Mais là encore, 24 (heures par jour) n'est pas divisible par 5, le multiple le plus commun de 5 et 24 est simplement 5 * 24 = 120. Et ainsi de suite ...
la source
Vous pouvez jouer avec la dernière heure de modification d'un fichier
Créez un petit script (par exemple
/usr/local/bin/age
) qui affichera l'âge d'un fichier:Votre crontab ressemblerait à ceci (en supposant que 25 minutes équivalent à 1500 secondes si j'ai raison)
Notez que j'utilise
/var/tmp
au lieu de/tmp
parce que selon le FHS, il n'est pas censé être supprimé lors de l'arrêt / démarrage du système.la source
Je pense que ce qui suit devrait fonctionner 0 0/25 * * *?
la source