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é.