É possível compensar um script cron definido para ser executado a cada 5 minutos?
Eu tenho dois scripts, o script 1 coleta alguns dados de um banco de dados e os insere em outro, o script 2 extrai esses dados e muitos outros dados e cria alguns relatórios bonitos. Ambos os scripts precisam ser executados a cada 5 minutos. Desejo compensar o script 2 por um minuto para que ele possa criar um relatório a partir dos novos dados. Por exemplo, eu quero que o script um seja executado :00, :05, :10, :15 [...]
e o script dois seja executado a :01, :06, :11, :16 [...]
cada hora. Os scripts não são dependentes um do outro e o script 2 deve ser executado independentemente de o script um ter êxito ou não. Mas seria útil se os relatórios pudessem ter os dados mais recentes. Isso é possível com o cron?
Postar;
Eu pensei em usar os dois comandos em um script de shell para que eles sejam executados imediatamente um após o outro, mas isso não funcionaria; às vezes, o script 1 pode ficar parado ao aguardar APIs externas etc. o script 2 deve ser executado a cada 5 minutos, dessa forma, interrompe / atrasa a execução do script 2. Se eu pudesse definir isso em Cron, isso significaria que o script 2 seria executado independentemente do script 1
O campo de entrada de minuto do crontab aceita um operador "incrementos de" que é meio confuso, porque parece que deve ser um operador "dividido por" matemático, mas não é. Você verá com mais frequência algo como o seguinte. Observe que isso não localiza números que são divisíveis por cinco, mas retira cada quinto item de um conjunto:
Isso instrui o cron a corresponder a cada quinto item (
/5
) do conjunto de minutos de 0 a 59 (*
), mas você pode alterar o conjunto da seguinte maneira:Isso levaria cada quinto item do conjunto de 1 a 59, executando seu comando nos minutos 6, 11, 16 etc.
Se você precisar de mais compensações de granulação fina do que um minuto, poderá cortá-lo usando o comando sleep como parte do seu crontab, desta forma:
Isso executaria seu trabalho a cada cinco minutos, mas o comando não seria iniciado até 15 segundos após o minuto. Para tarefas de execução curta, onde ficar alguns segundos depois de outra coisa faz toda a diferença, mas você não quer chegar um minuto inteiro atrasado, esse é um truque bastante simples.
fonte
Você pode indicar um deslocamento de tempo com o símbolo +. Por exemplo, para executar em
:01, :06, :11, :16 [...]
, crie uma tarefa comofonte
Isso funcionou para mim:
Onde 1 são os minutos de deslocamento. Então, se você deseja compensar três minutos:
Eu tenho isso funcionando nas configurações de agendamento da AWS
fonte