La commande dans crontab est exécutée avec /bin/sh
vous pouvez donc 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 cette entrée entière toutes les 5 minutes, mais seulement si la minute actuelle (en minutes depuis l'époque) modulo 25 est égal à zéro, il exécutera your_command
.
Comme d'autres l'ont souligné, 1 jour n'est pas divisible par 25 minutes, donc cela ne causera pas your_command
pour courir à la même heure tous les jours, mais cela va exécuter toutes les 25 minutes.
Votre meilleur pari est de courir à 20 minutes ou 30 minutes.
La meilleure solution consiste ensuite à déclencher toutes les 5 minutes, puis à conserver un décompte ou un horodatage interne, et à 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 pour 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 le vôtre, toujours sur le démon, et lui confier la planification.
Je n'en ai aucune expérience directe, mais fcron semble faire ce que vous voulez dès le départ. Selon sa documentation, vous pouvez spécifier des fréquences :
# Get our mails every 30 minutes
@ 30 getmails -all
# make some security tests every 48 hours of system up time,
# force a mail to be sent to root even if there is no output
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh