Um guia para expressões Cron

Um guia para expressões Cron

1. Visão geral

Simplificando, o cron é um utilitário básico disponível em sistemas baseados em Unix. Ele permite que os usuários planejem tarefas para serem executadas periodicamente em uma data / hora especificada. E é naturalmente uma ótima ferramenta para automatizar muitas execuções de processos que, de outra forma, exigiriam intervenção humana.

O Cron é executado como um processo daemon - o que significa que ele precisa ser iniciado apenas uma vez e continuará sendo executado em segundo plano. Este processo utilizacrontab para ler as entradas das programações e iniciar as tarefas.

Com o tempo,the cron expression format became widely adopted e podem ser usados ​​em muitos outros programas e bibliotecas.

Leitura adicional:

Introdução ao quartzo

Aprenda a agendar trabalhos com a API do Quartz.

Read more

A anotação @Scheduled na primavera

Como usar a anotação @Scheduled no Spring, para executar tarefas após um atraso fixo, a uma taxa fixa ou de acordo com uma expressão cron.

Read more

2. Trabalhando comCrontab

Uma programaçãocron é um arquivo de texto simples localizado em/var/spool/cron/crontabs em sistemas Linux. We cannot edit the crontab files directly; precisamos acessá-lo usando o comandocrontab.

Por exemplo, para abrir o arquivocrontab, você precisa disparar este comando:

crontab -e

Cada linha emcrontab é uma entrada com uma expressão e um comando para executar:

* * * * * * /usr/local/ispconfig/server/server.sh

Esta entrada é adicionada para executar o script mencionado a cada segundo.

3. Expressão Cron

Vamos entender a expressãocron; consiste em seis campos:

       

Destes, o campo<year> é opcional.

3.1. Caracteres especiais em expressão

  • * (all) - é usado para especificar que o evento deve ocorrer para cada unidade de tempo. Por exemplo,“*” no campo <minute> - significa “para cada minuto”

  • ? (any) - é utilizado nos campos <day-of-month>e <day-of -week> para denotar o valor arbitrário - negligencie o valor do campo. Por exemplo, se quisermos disparar um script no “quinto dia de cada mês” independentemente do dia da semana nessa data, especificamos um “?” no campo <day-of-week>

  • – (range) - é usado para determinar a faixa de valores. Por exemplo, “10-11” no campo<hour> significa “10ª e 11ª horas”

  • , (values) - é usado para especificar vários valores. Por exemplo, “MON, WED, FRI” no campo <day-of-week> significa nos dias“ segunda, quarta e sexta-feira ”

  • / (increments) - é usado para especificar os valores incrementais. Por exemplo, a“5/15” no campo <minute>, significa “5, 20, 35 e 50 minutos de uma hora”

  • L (last) - tem significados diferentes quando usado em vários campos. Por exemplo, se for aplicado no campo <day-of-month>, significa o último dia do mês, ou seja, "31 de janeiro" e assim por diante, no mês civil. Pode ser usado com um valor de deslocamento, como “L-3“, que denota o “terceiro ao último dia do mês calendário”. Em <day-of-week>, especifica o “último dia da semana”. Também pode ser usado com outro valor em <day-of-week>, como “6L“, que denota a “última sexta-feira”

  • W (weekday) - é usado para especificar o dia da semana (segunda a sexta) mais próximo de um determinado dia do mês. Por exemplo, se especificarmos “10W” no campo <day-of-month>, isso significa o “dia da semana próximo ao dia 10 daquele mês”. Portanto, se "10º" for um sábado, o trabalho será acionado no "9º" e se "10º" for um domingo, será acionado no "11º". Se você especificar “1W” em <day-of-month> e se “1º” for sábado, o trabalho será acionado no dia “3º”, que é segunda-feira, e não voltará para o mês anterior

  • # - é usado para especificar a ocorrência “N-th” de um dia da semana do mês, por exemplo, “3ª sexta-feira do mês” pode ser indicada como “6#3

3.2. Exemplos de expressão cron

Vejamos alguns exemplos da expressãocron usando as combinações de campos e caracteres especiais:

Às 12h (meio-dia) todos os dias durante o ano de 2017:

0 0 12 * * ? 2017

A cada 5 minutos, começando às 13h e terminando às 13h55 e, em seguida, começando às 18h e terminando às 18h55, todos os dias:

0 0/5 13,18 * * ?

Todos os minutos começando às 13h e terminando às 13h05, todos os dias:

0 0-5 13 * * ?

Às 13h15 e 13h45 todas as terças-feiras do mês de junho:

0 15,45 13 ? 6 Tue

Às 9h30 todas as segundas, terças, quartas, quintas e sextas-feiras:

0 30 9 ? * MON-FRI

Às 9h30 no dia 15 de cada mês:

0 30 9 15 * ?

Às 18h do último dia de cada mês:

0 0 18 L * ?

Às 18h do 3º ao último dia de cada mês:

0 0 18 L-3 * ?

Às 10h30 na última quinta-feira de cada mês:

0 30 10 ? * 5L

Às 18h da última sexta-feira de cada mês durante os anos de 2015, 2016 e 2017:

0 0 18 ? * 6L 2015-2017

Às 10h na terceira segunda-feira de cada mês:

0 0 10 ? * 2#3

À meia-noite da meia-noite todos os dias durante cinco dias a partir do 10º dia do mês:

0 0 0 10/5 * ?

4. Cron Special Strings

Além dos campos especificados na expressão cron, também há suporte para alguns valores especiais predefinidos - que podem ser usados ​​no lugar dos campos:

  • @reboot - executa uma vez na inicialização

  • @yearly ou@annualy - executado uma vez por ano

  • @monthly - executado uma vez por mês

  • @weekly - executado uma vez por semana

  • @daily ou@midnight - executado uma vez por dia

  • @hourly - executado de hora em hora

5. Conclusão

Neste artigo rápido, exploramos sobre os empregos decron ecrontab.

Também vimos vários exemplos de expressão que você pode usar no seu trabalho diário ou simplesmente deduzir outras expressões.