Português (Brasil)

Ferramentas de desenvolvedor · Gerador Crontab

Dia do mês vs dia da semana no cron: a regra OR que surpreende a todos

· Como funciona

cron calendário agendamento

Dois filtros de calendário unindo-se através de uma porta OR em uma programação
Ilustração vetorial original ToolAcre

Quando ambos os campos de dia são restritos, o cron executa o trabalho se algum deles corresponder. Esta postagem explica a regra do crontab(5), por que ela existe e como obter os agendamentos que ela impede.

O relatório foi veiculado no dia 1º e em todas as segundas-feiras — a expressão 0 9 1 * 1 não significa sua aparência

Uma expressão como `0 9 1 * 1` se parece com “09:00 na primeira segunda-feira” se as colunas de dois dias forem lidas como filtros cumulativos. ToolAcre não lê dessa forma. Com o dia do mês definido como 1 e o dia da semana definido como segunda-feira, o analisador avisa que qualquer uma das condições pode corresponder, portanto, a programação inclui toda primeira e toda segunda-feira.

Esta não é uma preferência de redação menor. Um relatório mensal pode ser executado quatro ou cinco vezes extras, e uma operação esperada apenas às segundas-feiras também pode ser executada no primeiro dia do mês. O gerador coloca um aviso “Vale a pena verificar” ao lado da descrição para que o comportamento expandido fique visível antes que uma expressão seja copiada para um crontab externo.

A regra conforme escrita - se o dia do mês e o dia da semana forem restritos, o comando será executado quando um dos campos corresponder

A função `dayMatches` da implementação trata explicitamente de quatro casos. Dois curingas aceitam todas as datas; um dia do mês curinga é adiado para dia da semana; um dia da semana curinga é adiado para o dia do mês; e dois campos restritos retornam o OR lógico de suas correspondências. Os testes cobrem uma data correspondente apenas ao dia 13, apenas sexta-feira e nenhuma condição.

As descrições preservam a mesma regra. `0 0 13 * 5` é traduzido como “no dia 13 do mês ou na sexta-feira”, não uma conjunção ambígua. A análise, a seleção da próxima execução e a saída em inglês usam a mesma interpretação. Esse comportamento partilhado é uma evidência mais forte do que um rótulo de ajuda isolado, porque o desacordo entre esses caminhos criaria imediatamente previsões enganosas.

O analisador implementa OR e expõe a consequência; não estabelece a história da regra

O esboço da apostila ofereceu uma razão histórica para o design da sala cirúrgica, mas este repositório prova o comportamento e não a proveniência. Os comentários do código identificam uma regra no estilo Vixie e os testes estabelecem o resultado modelado por ToolAcre. Não documentam quem escolheu a regra, quando foi adoptada ou porque foi preferida uma interpretação permissiva.

Manter esse limite é importante na redação técnica. Os leitores precisam saber exatamente como esta ferramenta expande a expressão; eles não precisam de uma narrativa inventada de padrões para usá-la com segurança. Se um destino de implantação documentar semânticas diárias diferentes, seu próprio manual superará a visualização do navegador. ToolAcre declara o dialeto que calcula, em vez de afirmar que todos os agendadores concordam.

Exemplo resolvido: enumerando 0 9 1 * 1 por um mês - os dias em que ele dispara, em comparação com a programação desejada pelo autor

Considere um mês cujo primeiro dia não seja segunda-feira. `0 9 1 * 1` produz uma execução na primeira e execuções adicionais todas as segundas-feiras. Se a primeira for segunda-feira, essa data ainda aparecerá uma vez porque a pesquisa da próxima execução considera um minuto do calendário, e não dois acionadores separados. A união muda de tamanho com o calendário, mas não de lógica.

Você pode inspecionar essa união escolhendo um fuso horário e lendo as próximas cinco execuções. A visualização começa estritamente após o instante atual e pesquisa as datas do calendário, aplicando campos de mês, dia e hora. Não promete um mês específico na prosa do artigo porque a lista ativa depende de quando e onde o leitor realiza a verificação.

As soluções alternativas do comando da primeira segunda-feira no estilo AND estão fora deste gerador de agendamento

O plano sugeria incorporar um teste de data do shell para obter o comportamento AND. ToolAcre não pode verificar tal comando: ele aceita apenas os cinco campos de agendamento e sua linha completa copiada contém um executável de espaço reservado. A sintaxe do shell, o percentual de escape, a disponibilidade do comando e o comportamento de saída pertencem ao ambiente que eventualmente executa o trabalho.

Dentro deste gerador, a medida segura do projeto é deixar o campo de um dia como `*`, a menos que a união OR seja genuinamente pretendida. Para um requisito de primeira segunda-feira, documente que o cron de cinco campos sozinho não expressa a interseção neste dialeto. Escolha e teste uma solução específica do ambiente separadamente, em vez de apresentar um snippet não executado como garantido.

Outros operadores do escalonador não são interpretados por este analisador de cinco campos

Algumas gramáticas do escalonador expõem operadores como `#`, `L`, `W` ou `?`, mas este analisador não aceita nenhum deles. Ele também recusa seis campos e explica que seu contrato é uma sintaxe crontab de cinco campos. Portanto, uma expressão que funcione em outro produto não pode ser colada aqui como prova de que existe a mesma regra de calendário.

A tradução de dialeto começa identificando as gramáticas de origem e de destino, e não excluindo a pontuação até que a validação seja bem-sucedida. ToolAcre pode ajudar a construir os cinco campos, nomes, intervalos, listas e etapas comuns do alvo. Não pode preservar a semântica transportada por um operador não suportado, e os artigos evitam deliberadamente descrever esses operadores estrangeiros como se tivessem sido implementados.

O escape de comando está fora da gramática somente de expressão

Os sinais de porcentagem e aspas de comando aparecem após o planejamento e estão fora de `parseCron`. O analisador divide uma expressão em exatamente cinco partes separadas por espaços em branco; ele nunca lê um pipeline de shell, comando de data ou carga útil de comando de escape. Conseqüentemente, este artigo não ensina uma solução alternativa para sinais de porcentagem, embora a apostila propusesse uma.

Essa omissão é uma decisão correta. Uma ferramenta de agendamento não deve implicar que um comando é seguro porque seus campos de temporização são validados. Revise a sintaxe do comando na implementação real do cron e no shell, com entradas inofensivas e saída observável. Mantenha o escopo do resultado do gerador de acordo com a regra de calendário que ele comprovadamente entende.

Conclusão: restrinja o campo de um dia, não ambos - e a explicação do gerador torna o OR visível antes de você salvar a linha

Quando ambos os campos diários estiverem restritos, leia-os como uma união e diga “ou” em voz alta. Melhor ainda, inspecione o aviso do gerador e as próximas execuções. Se essas datas excederem o conjunto pretendido, retorne um campo para `*` e resolva qualquer requisito mais especializado com um mecanismo documentado pelo ambiente de destino.

A lição principal não é que o cron seja misterioso; é que duas colunas adjacentes não se combinam como as outras restrições. ToolAcre centraliza essa exceção na lógica de análise, descrição e visualização. Use essas três visualizações para detectar a incompatibilidade antes que uma expressão saia do navegador e se torne uma programação operacional.