Pular para o conteúdo principal

Como agendar tarefas pelo crontab ?


Início:
O cron é um servidor que executa comandos agendados.
 Características Cron: 

Adicionalmente, cron verifica a cada minuto se houve alguma mudança na data de seu diretório de serviços (ou na data de /etc/crontab), e em caso positivo, o cron irá examinar a data de todos os arquivos crontab e recarregar aqueles que foram alterados. Assim, o cron não necessita ser reinicializado toda vez que um arquivo crontab for alterado.
 O formato de um comando do cron é em grande parte o padrão V7, com várias extensões upward-compatible. Cada linha tem cinco campos de hora e data, seguidos por um nome de usuário se este arquivo crontab for o do sistema, seguidos por um comando. Comandos são executados pelo cron(8) quando os campos minuto, hora, e mês correspondem à hora atual, e quando pelo menos um dos campos de dia (dia do mês, ou dia da semana) correspondem ao dia atual (veja "Observação" abaixo). O cron(8) examina as entradas cron a cada minuto. Os campos de hora e data são:
        campo         valores permitidos
        -----         ------------------
        minuto        0-59
        hora          0-23
        dia do mês    0-31
        mês           0-12 (ou nomes, veja abaixo)
        dia da semana 0-7 (0 ou 7 é domingo, ou use nomes)
Um campo pode ser um asterisco (*), que sempre significa "primeiro-último".

Configurando o Cron:

 Pode-se usar intervalos de números. Um intervalo é um par de números separados por um hífen. O intervalo especificado é inclusivo. Por exemplo, 8-11 em uma entrada "horas" especifica execução às 8, 9, 10 e 11 horas.
Pode-se usar listas. Uma lista é um conjunto de números (ou intervalos) separados por vírgulas. Exemplos: "1,2,5,9", "0-4,8-12".
Valores de passo podem ser usados em conjunto com intervalos. Um "/<número>" imediatamente após um intervalo especifica um passo no valor do número através do intervalo. Por exemplo, "0-23/2" pode ser usado no campo das horas para especificar que o comando deve ser executado a cada duas horas (a alternativa no padrão V7 seria "0,2,4,6,8,10,12,14,16,18,20,22"). Passos também são permitidos depois de um asterisco. Logo, se você quer dizer "a cada duas horas", simplesmente use "*/2". Nomes (em inglês) também podem ser usados nos campos "mês" e "dia da semana". Use as primeiras três letras do dia ou mês desejado (em maiúsculas ou minúsculas, não importa). Intervalos ou listas de nomes não são permitidos.
O campo "sexto" (o resto da linha) especifica o comando a ser executado. Toda a parte da linha correspondente ao comando, até um fim-de-linha ou um caractere `%', será executada por /bin/sh ou pelo shell especificado na variável SHELL do arquivo cron. Símbolos de porcentagem (%) no comando, a menos que precedidos por uma barra invertida (\), são transformados em caracteres fim-de-linha, e todos os dados após o primeiro `%' são enviados ao comando como entrada padrão.
Observação: o dia de execução de um comando pode ser especificado por dois campos - dia do mês e dia da semana -. Se ambos os campos são restritos (i.e., diferentes de `*'), o comando será executado quando qualquer dos dois campos corresponder à data atual. Por exemplo, "30 4 1,15 * 5" faria com que o comando fosse executado às 04:30 nos dias 1 e 15 de cada mês, e em todas as sextas-feiras.
Veja o /etc/crontab: 
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly

Simplesmente coloque uma tarefa (um executável) para ser executada, dentro do diretório específico:
    /etc/cron.hourly : de hora em hora
    /etc/cron.daily  : todo dia
    /etc/cron.weekly : uma vez por semana
    /etc/cron.monthly : uma vez por mes

Agora, se quiser algo mais específico, apenas adicione linhas ao /etc/crontab seguindo a mesma lógica. Por exemplo, executar um programa de backup do sistema, passando para ele o parâmetro "geral", como superusuário (root), de segunda a sexta-feira, de março a novembro, às 3:44 da manhã:
    44 3 * 3-11 1-5 root /root/backup geral
     | | |   |   |   |     |
     | | |   |   |   |     +---- comando a ser executado (com a rota)
     | | |   |   |   +---------- usuário que executará o comando
     | | |   |   +-------------- dia da semana
     | | |   +------------------ mês do ano
     | | +---------------------- dia do mês
     | +------------------------ hora
     +-------------------------- minuto

Eventuais mensagens de erro são mandadas para a caixa postal do superusuário (root). 
Exemplos de arquivos Cron:

    # usa /bin/sh para executar comandos, independentemente do que
    # /etc/passwd diz.
    SHELL=/bin/sh
    # envia (por mail) toda saída para `paul', independentemente de
    # quem
    # é o dono do crontab.
    MAILTO=paul
    #
    # executa a 0h05, todo dia.
    5 0 * * *    $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
    # executa às 14h15 no dia primeiro de cada mês -- a saída é
    # enviada para paul
    15 14 1 * *   $HOME/bin/monthly
    # executa às 22h00 em dias de semana.
    0 22 * * 1-5  mail -s "São 22 horas" joe%Joe,%%Where are your
    kids?%
    23 0-23/2 * * * echo "executa a 0h23, 2h23, 4h23 ..., todo dia"
    5 4 * * sun   echo "executa às 4h05 todo domingo"

Usando o crontab:

A primeira forma de uso deste comando é a instalação de um novo crontab a partir de um arquivo já existente ou da entrada padrão se o caracter "-" for informado.
A opção -l faz com que o crontab seja listado na saída padrão.
A opção -r remove o crontab atual.
A opção -e é usada para editar o crontab atual usando o editor especificado nas variáveis de ambiente VISUAL ou EDITOR. Após a finalização da edição, o arquivo crontab modificado terá efeito imediato.

Comentários

Postagens mais visitadas deste blog

Tutorial: Consultas LDAP no Active Directory

Hoje será mostrado como fazer Consultas Salvas (Saved queries) e alguns exemplos: 1. No Active Directory Users and Computers, click com o botão direito no item Saved Queries e selecione New e depois Query. 2. Digite o nome para a Query, por exemplo: “Usuários Ativos” e coloque uma descrição e depois clic em Define Query. 3. Na drop-down box Find selecione Custom Search e então click em Advanced tab. 4. Digite uma das Queries e execute. Consultas de Usuarios Usuarios sem grupo (apenas domain users): (&(objectCategory=user)(objectClass=user)(!memberOf=*)) Usuarios sem e-mail (objectcategory=person)(!mail=*) Usuarios com e-mail (objectcategory=person)(mail=*) Usuarios que nunca fizeram logon no dominio (&(&(objectCategory=person)(objectClass=user))(|(lastLogon=0)(!(lastLogon=*)))) Usuários Criados depois de 09/10/2011 (objectCategory=user)(whenCreated>=20111009000000.0Z) Obs: troque o data por uma data da sua necessidade Usuários que precisam mudar a sen...

Usando o CIFS para mapear diretórios Windows no Linux

Usando o CIFS para mapear diretórios Windows no Linux Se você utiliza o samba e está tendo problemas com mapeamentos, não possui Samba no seu servidor Linux ou precisa acessar de forma rápida um diretório Windows pelo Linux, passe a usar o CIFS. Com ele, caso o servidor mapeado sofra um shutdown (Linux mapeando Windows), automaticamente ao se re-estabelecer a conexão com o Servidor, o mapeamento sobe. Neste post estarei tratando a situação onde temos um servidor Linux e desejamos através dele efetuar leituras ou gravações em diretórios no Windows. No Windows Estou adotando como exemplo o servidor com IP 192.168.0.1, dominio TESTE, usuário Administrador e senha 123!456. O objetivo é mapear o diretório D:\Teste no Linux. Então, pelo windows, compartilhe este diretório. No Linux# cd /mnt # mkdir teste # mount –t cifs //192.168.0.1/teste /mnt/teste –o user=Administrador,password=’123!456’,domain=TESTE Pronto!!! Agora você pode compartilhar seus arquivos entre o...

Erro MYSQL Cloud (Google, AWS, Digital Ocean) - Resolvido

Atualmente executando um servidor nginx com o wordpress, recebo um erro no banco de dados após alguns minutos de execução. Ao executar o comando para verificar os logs: # tail -f /var/log/mysqld.log a saída do comando é : 2019-09-12 19:11:24 25864 [Note] Plugin 'FEDERATED' is disabled. 2019-09-12 19:11:24 25864 [Note] InnoDB: Using atomics to ref count buffer pool pages 2019-09-12 19:11:24 25864 [Note] InnoDB: The InnoDB memory heap is disabled 2019-09-12 19:11:24 25864 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2019-09-12 19:11:24 25864 [Note] InnoDB: Memory barrier is not used 2019-09-12 19:11:24 25864 [Note] InnoDB: Compressed tables use zlib 1.2.11 2019-09-12 19:11:24 25864 [Note] InnoDB: Using Linux native AIO 2019-09-12 19:11:24 25864 [Note] InnoDB: Using CPU crc32 instructions 2019-09-12 19:11:24 25864 [Note] InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 2019-09-12 19:11:2...