Exécutez une tâche cron toutes les 5 minutes entre deux fois

18

Existe-t-il un moyen de spécifier un travail qui s'exécute toutes les 5 minutes entre une heure de début et une heure de fin les jours ouvrables dans une crontab?

Mise à jour Je pense qu'il est pertinent que mes heures de début et de fin ne soient pas aux heures rondes. Donc, spécifier 9-5 dans la colonne heure ne suffit pas. Je veux 9h30-17h30.

métaphore pythonique
la source

Réponses:

24

Vous devrez le faire par morceaux:

30-59/5 9 * * * script.sh
*/5 10-16 * * * script.sh
0-30/5 17 * * * script.sh
Ignacio Vazquez-Abrams
la source
1

Si la réponse d'Ignacio Vazquez-Abrams ne fonctionne pas vraiment pour vous, par exemple parce que le script a besoin d'un grand nombre de paramètres ou que les critères d'invocation ne sont pas triviaux (ou non limités dans le temps), alors une approche alternative consiste à faire un simple script wrapper, appelez le script wrapper à intervalles réguliers et demandez au script wrapper de vérifier l'heure actuelle et d'appeler le script principal.

Par exemple:

#/bin/bash

# Check to see if we should run the script now.
HOUR=$(date +%H)
MINUTE=$(date +%M)
if test $HOUR -lt 9; then exit 0; fi
if test $HOUR -eq 9 -a $MINUTE -lt 30; then exit 0; fi
if test $HOUR -eq 17 -a $MINUTE -gt 30; then exit 0; fi
if test $HOUR -gt 17; then exit 0; fi

# All checks passed; we should run the script now.
exec script.sh ... long list of parameters ...

Cela permet d'encoder des critères d'exécution plus complexes que la syntaxe de cron ne le permet facilement, aux frais relativement faibles d'invoquer régulièrement un shell et un script séparé.

un CVn
la source