Você terá que fazer isso por partes:
30-59/5 9 * * * script.sh
*/5 10-16 * * * script.sh
0-30/5 17 * * * script.sh
Existe uma maneira de especificar um job que é executado a cada 5 minutos entre um horário de início e um horário de término em dias úteis em um crontab?
Atualizar Eu acho que é relevante que meus horários de início e fim não sejam em horários redondos. Portanto, especificar 9-5 na coluna da hora não é suficiente. Eu quero 9: 30-17: 30.
Se a resposta de Ignacio Vazquez-Abrams não funciona realmente para você, por exemplo, porque o script precisa de um grande número de parâmetros ou os critérios de invocação são não-triviais (ou não ligados a tempo), então uma abordagem alternativa é criar um script wrapper simples, chamar o script wrapper em intervalos regulares e fazer com que o script wrapper verifique a hora atual e invocar o script roteiro 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, com um custo relativamente pequeno de invocar um shell e um script separado regularmente.