Como eu faria para que um trabalho cron fosse executado a cada 30 minutos?

224

Eu estou olhando para adicionar uma crontabentrada para executar um script a cada 30 minutos, na hora e 30 minutos após a hora ou algo próximo. Eu tenho o seguinte, mas não parece ser executado em 0.

*/30 * * * *

Qual string eu preciso usar?

O cron está sendo executado no OSX.

Darryl Hein
fonte
Você conseguiu fazer seu crontab funcionar? Seu problema pode não ser o crontab, mas fazê-lo ser usado.
25909 Eddie
Está executando outros 2 scripts, um a cada minuto.
Darryl Hein
1
Estou esperando para ver se uma das respostas abaixo funciona, basta aguardar até os próximos 30 minutos ... em 3 minutos.
Darryl Hein
2
... Você não pode simplesmente mudar de 0,30 para 0,5? Se 0,5 funciona, por que não 0,30?
George Stocker
1
Você nunca nos disse se funcionou a uma hora!
25909 Eddie

Respostas:

487

Faz:

0,30 * * * * your_command
vladr
fonte
1
Funciona bem! No CentOS crontab, eu tinha que fazer algo como 0,30 * * * * root your_commandonde root seria o usuário que estou usando.
prograhammer
@prograhammer - Essa linha fazia parte do crontab de uma raiz ou do crontab de outro usuário?
Muhamed Huseinbašić
@ MuhamedHuseinbašić boa pergunta, já que existem 2 crontabs diferentes (o global e o usuário). Vou ter que verificar e ver ...
prograhammer
100

O crontab não entende "intervalos", apenas entende "cronograma"

horas válidas: 0-23 - minutos válidos: 0-59

Exemplo 1

30 * * * * your_command

isso significa "executar quando o minuto de cada hora for 30 " (executaria em: 1:30, 2:30, 3:30, etc)

exemplo 2

*/30 * * * * your_command

isso significa "executar quando o minuto de cada hora é igualmente divisível por 30 " (executaria em: 1:30, 2:00, 2:30, 3:00, etc)

exemplo 3

0,30 * * * * your_command

isso significa "executar quando o minuto de cada hora for 0 ou 30 " (executaria em: 1:30, 2:00, 2:30, 3:00, etc)

é outra maneira de obter os mesmos resultados do exemplo nº 2

exemplo 4

19 * * * * your_command

isso significa "executar quando o minuto de cada hora for 19 " (executaria em: 1:19, 2:19, 3:19, etc)

exemplo 5

*/19 * * * * your_command

isso significa "executar quando o minuto de cada hora é igualmente divisível por 19 " (seria executado em: 1:19, 1:38, 1:57, 2:19, 2:38, 2:57 etc.)

nota: vários refinamentos foram feitos neste post por vários usuários, incluindo o autor

aequalsb
fonte
76

Tente o seguinte:

0,30 * * * * your command goes here

De acordo com a página de manual oficial do Mac OS X crontab (5) , a /sintaxe é suportada. Portanto, para descobrir por que não estava funcionando para você, será necessário olhar nos logs para ver o cron. Nesses logs, você deve encontrar uma mensagem clara de falha.

Nota: O Mac OS X parece usar o Vixie Cron, o mesmo que o Linux e os BSDs.

Eddie
fonte
Eu sempre usei * / 30 com sucesso, mas não me lembro de um aplicativo meu em que era muito crítico se ele fosse executado apenas uma vez por hora, então acho que nunca verifiquei.
257 Adam Hawes
2
@ Adam Hawes: Eu também usei * / xx com sucesso no passado, mas no Linux e outros UNIXes. Eu pessoalmente não tentei o Mac OSX. A pergunta original não dizia qual sistema operacional. Alguns UNIXes mais antigos não suportam * / xx
Eddie
Sua resposta também funcionou, mas Vlad tem menos representantes, então eu dei a ele os pontos.
Darryl Hein
1
@DarrylHein lol, Hoje Eddie tem menos representantes :-p. Eu votei em Eddie.
iniciante 17/11/14
5

Você mencionou que está usando o OS X- Eu usei o cronnix no passado. Não é tão nerd quanto editá-lo, mas me ajudou a aprender o que as colunas estão em um instante. Apenas um pensamento.

Allyn
fonte
Caso contrário, isso também poderia ser útil.
Darryl Hein
3

Você pode usar os símbolos ' , ' OR divide ' / '.
Mas ' / ' é melhor.
Suponha o caso de 'a cada 5 minutos'. Se você usar ' , ', precisará escrever o trabalho cron da seguinte maneira:

0,5,10,15,20,25,30,35,....    *      *     *   * your_command

Isso significa executar o seu_command a cada hora em todos os minutos definidos: 0,5,10, ...

No entanto, se você usar '/', poderá escrever o seguinte trabalho simples e curto:

*/5  *  *  *  *  your_command

Significa executar o seu_comando nos minutos que são divisíveis por 5 ou nas palavras mais simples, '0,5,10, ...'

Portanto, o símbolo divisível '/' é a melhor opção sempre;

Mohsen Abasi
fonte