Der Befehl in crontab wird mit /bin/sh
ausgeführt so können Sie die arithmetische Erweiterung verwenden, um zu berechnen, ob die aktuelle Minute modulo 25 gleich Null ist:
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
wird diesen gesamten Eintrag alle 5 Minuten ausführen, aber nur wenn die aktuelle Minute (in Minuten seit der Epoche) modulo 25 gleich Null ist, wird your_command
ausgeführt .
Wie andere angemerkt haben, ist 1 Tag nicht gleichmäßig durch 25 Minuten teilbar, daher wird dies nicht zu your_command
führen jeden Tag zur gleichen Zeit laufen, aber es wird laufen alle 25 Minuten.
Am besten läufst du mit 20 oder 30 Minuten.
Am besten ist es, alle 5 Minuten auszulösen und dann eine interne Zählung oder einen Zeitstempel beizubehalten und bei jedem 5. Auslöser auszuführen, oder wenn seit der letzten Ausführung 25 Minuten vergangen sind.
Komplizierter wäre es, die richtigen Zeiten für einen Tag zu berechnen, beginnend um Mitternacht, und den Fehler am Ende des Tages zu akzeptieren. Dazu müsste der Crontab-Eintrag für die verschiedenen Stunden dupliziert werden.
Komplizierter wäre es, die Zeiten für einen ganzen Monat zu berechnen, was viele Kopien des crontab-Eintrags erfordern würde, um die verschiedenen Kombinationen abzudecken.
Schließlich könnten Sie Ihren eigenen Always-On-Daemon implementieren und diesen die Zeitplanung erledigen lassen.
Ich habe keine direkte Erfahrung damit, aber fcron scheint sofort zu tun, was Sie wollen. Gemäß seiner Dokumentation können Sie Frequenzen angeben:
# 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