
Preciso executar um cron job a cada 15 minutos, começando às 06h05 e terminando às 22h05.
0 5/15 6-22 * * *
A sintaxe a seguir inclui 22:35 e 22:50.
Alguma ideia de como conseguir isso? Isso é possível com uma linha ou preciso configurar várias?
Responder1
É possível com um croline mas apenas com truques
SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(date +\%H\%M)" ]] || /path/to/script
Ou com sh
(e bash)
SHELL=/bin/sh
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /path/to/script;;esac
Observe os escapes de barra invertida para caracteres de porcentagem (%), necessários para crontabs.
Responder2
*/15 6-22 * * * /path/to/script
OU
5,20,35,50 6-22 * * * /path/to/script
Um campo pode ser um asterisco (*), que sempre significa "primeiro-último". Intervalos de números são permitidos. Os intervalos são dois números separados por um hífen. O intervalo especificado é inclusivo. Por exemplo, 8-11 para uma entrada de “horas” especifica a execução nas horas 8, 9, 10 e 11.
Listas são permitidas. Uma lista é um conjunto de números (ou intervalos) separados por vírgulas. Exemplos: "1,2,5,9", "0-4,8-12".
Os valores de etapa podem ser usados em conjunto com intervalos. Seguir um intervalo com "" especifica saltos do valor do número no intervalo. Por exemplo, "0-23/2" pode ser usado no campo horas para especificar a execução do comando a cada duas horas (a alternativa no padrão V7 é "0,2,4,6,8,10,12,14,16 ,18,20,22"). As etapas também são permitidas após um asterisco, então se você quiser dizer "a cada duas horas", basta usar "*/2".
Os nomes também podem ser usados para os campos “mês” e “dia da semana”. Use as três primeiras letras do dia ou mês específico (maiúsculas e minúsculas não importa). Intervalos ou listas de nomes não são permitidos.
O campo "sexto" (o resto da linha) especifica o comando a ser executado. Toda a parte do comando da linha, até um caractere de nova linha ou %, será executada por /bin/sh ou pelo shell especificado na variável SHELL do arquivo cron. Os sinais de porcentagem (%) no comando, a menos que sejam escapados com barra invertida (), serão alterados para caracteres de nova linha e todos os dados após o primeiro% serão enviados ao comando como entrada padrão.
Nota: O dia da execução de um comando pode ser especificado por dois campos – dia do mês e dia da semana. Se ambos os campos forem restritos (ou seja, não forem *), o comando será executado quando um dos campos corresponder à hora atual. Por exemplo, "30 4 1,15 * 5" faria com que um comando fosse executado às 4h30 nos dias 1 e 15 de cada mês, além de todas as sextas-feiras.
Responder3
Eu pessoalmente dividiria em duas linhas:
5-50/15 6-21 * * * /path/to/script
5 22 * * * /path/to/script
A primeira linha cobre 0605-2150, a segunda - para execução adicional em 2205.
Se você realmente deseja um liner, eu usaria uma verificação inexata para acomodar um possível horário de início do trabalho inexato:
5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script
Responder4
Um pouco atrasado, mas para fins de integridade, você pode obter uma lista de tempos de execução futuros para qualquer expressão cron em CronBuddy.com - uma maneira fácil de verificar o que vai acontecer.