Se a resposta de Ignacio Vazquez-Abrams não funcionar realmente para você, por exemplo, porque o script precisa de um grande número de parâmetros ou os critérios de chamada não são triviais (ou não têm limite de tempo), uma abordagem alternativa é simplificar script do wrapper, chame o script do wrapper em intervalos regulares e faça com que o script do wrapper verifique a hora atual e invoque o script principal.
Por exemplo:
#/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 ...
Isso permite codificar critérios de execução mais complexos do que a sintaxe do cron permite facilmente, com uma despesa relativamente pequena de chamar um shell e um script separado regularmente.