como combinar dia da semana e dia do mês em crontab?

1

Eu quero executar alguns trabalhos no primeiro dia de cada mês e outros no primeiro dia de cada semana, mas e se os dois colidirem? Neste caso, o mês deve ter precedência. Como eu conto este cron?

# run on every day 1 of each month:
59 12 1 * * user script_month

# run on every day 1 of each week:
59 12 * * 1 user script_week

EDIT 1 :

Existe uma resposta que usa "IF", que é uma boa solução.

E sobre isso:

# run on every day 1 of each week:
59 12 2-31 * 1 user script_week

Talvez também faça o que eu estou pedindo? (execute todas as semanas no dia 1, exceto se for o dia 1 do mês)

Editar 2:

Eu encontrei isto:

"Se ambos os campos [data] estiverem restritos (ou seja, não são *), o comando será executado quando o campo qualquer corresponder à hora atual." (fonte: link )

Parece que não é possível como escrevi no Edit 1?

    
por mit 07.12.2010 / 00:26

2 respostas

7

Tem script_week para verificar se está sendo executado no dia 1 do mês. Se for, então saia antes de fazer qualquer trabalho real. Por exemplo, em um script bash, essa verificação pode ser assim:

if [ '/bin/date +%d' = "01" ]; then exit 0; fi

Se preferir, você pode deixar script_week sem modificações e, em vez disso, colocar uma verificação semelhante na entrada crontab de script_week , algo assim:

59 12 * * 1 user if [ '/bin/date +\%d' != "01" ]; then script_week; fi
    
por 07.12.2010 / 00:41
3

Se for um trabalho de longa duração, você também pode considerar que o script use um arquivo de bloqueio para que apenas uma instância dele seja executada por vez. Em seguida, você pode listá-lo nas duas entradas do cron e confiar na detecção de quando já está em execução.

Isso também pode ser útil se for um trabalho muito demorado. Às vezes, tenho executado em tarefas cron que normalmente não demoram muito, mas se o sistema estiver sendo executado em logs de processamento de alta carga ou em um grande trabalho, isso pode demorar mais do que o esperado. Então, se vários desses trabalhos começarem ao mesmo tempo, eles poderão começar a empilhar e, eventualmente, colocar a máquina de joelhos.

É improvável que um trabalho seja executado uma vez por semana, mas é um bom hábito entrar - evitando que os trabalhos se acumulem, e seria um dever duplo evitar que o trabalho fosse executado a partir de ambas as entradas do crontab.

    
por 07.12.2010 / 05:03

Tags