Cron e crontab, explicado

Lucasino publicado um tempo atrás excelente tutorial sobre cron e crontab que eu acho que vale a pena compartilhar. Cron é uma espécie de equivalente a Tarefas Agendadas no Windows, apenas que é tratado a partir do terminal. Aqueles que preferem uma interface visual para atingir o mesmo objetivo, podem ver isso outro item.

O que é cron?

O nome cron vem do grego chronos, que significa "tempo". No sistema operacional Unix, cron é um gerenciador de processos em segundo plano regular (daemon) que executa processos ou scripts em intervalos regulares (por exemplo, a cada minuto, dia, semana ou mês). Os processos que devem ser executados e a hora em que devem ser executados são especificados no arquivo crontab.

Como Funciona

O cron daemon começa em /etc/rc.d/ o /etc/init.d dependendo da distribuição. O Cron é executado em segundo plano, verifica a tabela de tarefas do crontab a cada minuto / etc / crontab o em / var / spool / cron em busca de tarefas a serem realizadas. Como usuário, podemos adicionar comandos ou scripts com tarefas ao cron para automatizar alguns processos. Isso é útil, por exemplo, para automatizar a atualização de um sistema ou um bom sistema de backup.

Artigo relacionado:
Tutorial: Instale os pacotes .tar.gz e .tar.bz2

O que é o Crontab?

O Crontab é um arquivo de texto simples que armazena uma lista de comandos a serem executados em um horário especificado pelo usuário. O Crontab verificará a data e hora em que o script ou comando deve ser executado, as permissões de execução e o fará em segundo plano. Cada usuário pode ter seu próprio arquivo crontab, na verdade o / etc / crontab presume-se que seja o arquivo crontab do usuário root, quando usuários normais (e até mesmo o root) desejam gerar seu próprio arquivo crontab, usaremos o comando crontab.

Crontab é a maneira mais fácil de gerenciar tarefas cron em sistemas multiusuário, seja como um usuário de sistema simples ou usuário root.

Usando crontab

Estamos começando com um exemplo simples.

Vamos automatizar a atualização de um sistema, para eliminar o chato “Tenho sempre que atualizar e não gosto disso!

como
Artigo relacionado:
Comandos para conhecer o sistema (identificar hardware e algumas configurações de software)

Em primeiro lugar faremos um script. Este script será chamado pelo cron e conterá todas as instruções que queremos fazer, portanto é necessário testá-lo em vários casos e de várias maneiras antes de incluí-lo no cron, um script de atualização simples como este:

#! / bin / bash #script update example #escolher sua distribuição # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Remova o # de sua linha de distribuição. No caso de ser Ubuntu / Debian, ele começa com apt-get.

Salvamos o script como update.sh (por exemplo, o diretório de scripts de sua casa). Alteramos as permissões de execução do referido script com:

chmod a + x ~ / scripts / update.sh

Executamos o script algumas vezes para verificar se tudo está funcionando perfeitamente, modificamos o que é necessário (não deve conter erros, caso contrário, o cron apenas repetirá um erro continuamente). Agora, para adicionar a tarefa ao nosso crontab.

Adicionar tarefas ao crontab

Executamos a edição do crontab com crontab -e, em algumas distros (como o Ubuntu) dá-nos a opção de escolher o editor de texto que queremos, o resto ficamos com o vi. O arquivo crontab será parecido com isto.

# mh dom mon dow comando do usuário

Onde:

  • m corresponde ao minuto em que o script será executado, o valor varia de 0 a 59
  • h a hora exata, o formato de 24 horas é tratado, os valores variam de 0 a 23, com 0 sendo 12:00 meia-noite.
  • Sol refere-se ao dia do mês, por exemplo, você pode especificar 15 se quiser executar a cada 15 dias
  • Dow significa o dia da semana, pode ser numérico (0 a 7, onde 0 e 7 são domingo) ou as 3 primeiras letras do dia em inglês: seg, ter, qua, qui, sex, sáb, sol.
  • usuário define o usuário que executará o comando, pode ser root, ou um usuário diferente desde que tenha permissão para executar o script.
  • comando refere-se ao comando ou caminho absoluto do script a ser executado, exemplo: /home/usuario/scripts/update.sh, se ele chama um script, deve ser executável

Para esclarecer alguns exemplos de tarefas cron explicadas:

15 10 * * * usuário /home/user/scripts/update.sh

Ele executará o script update.sh às 10h15 todos os dias

15 22 * * * usuário /home/user/scripts/update.sh

Ele executará o script update.sh às 10:15 todos os dias

00 10 * * 0 root apt-get -y update usuário Root

Ele executará uma atualização todos os domingos às 10h

45 10 * * sun root apt-get -y atualização

O usuário root executará uma atualização todos os domingos (dom) às 10:45

30 7 20 11 * usuário /home/usuario/scripts/updata.sh

Em 20 de novembro às 7h30 o usuário executará o script

30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh

No dia 11 de novembro às 7h30 e é domingo, o usuário celebrará seu administrador de sistema (ou seja, eu)

01 * * * * usuário /home/usuario/scripts/molestorecordatorio.sh

Um lembrete irritante a cada minuto de cada hora todos os dias (NÃO recomendado).

Eles ainda podem ser manipulados faixas especiais:

30 17 * * 1,2,3,4,5

Às 5:30 da tarde todos os dias de segunda a sexta-feira.

00 12 1,15,28 * *

Às 12h nos dias primeiro, quinze e 28 de cada mês (ideal para folha de pagamento)

Se isso é confuso, o crontab trata strings especiais para definir esses intervalos.

@reboot Executar uma vez, na inicialização
@yearly funciona apenas uma vez por ano: 0 0 1 1 *
@anualmente o mesmo que @ano
@mês é executado uma vez por mês, no primeiro dia: 0 0 1 * *
@weekly Weekly no primeiro minuto da primeira hora da semana. 0 0 * * 0 ″.
@diariamente diariamente, às 12h00 0 0 * * *
@midnight igual a @daily
@horas no primeiro minuto de cada hora: 0 * * * *

Seu uso é muito simples.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Por último mas não menos importante:

Gerenciamento de cron job

arquivo crontab

Substitua o arquivo crontab existente por um arquivo definido pelo usuário

crontab -e

Edite o arquivo crontab do usuário, cada nova linha será uma nova tarefa crontab.

crontab -l

Liste todas as tarefas crontab do usuário

crontab -d

Excluir o crontab do usuário

crontab -c diretório

Define o diretório crontab do usuário (deve ter as permissões de gravação e execução do usuário)

crontab -u user

prefixo para lidar com o crontab de outro usuário, exemplos:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

Esta ferramenta, como muitas outras, pode ser vista com mais profundidade e detalhes em:

Obrigado Lucain!

Adicionar como fonte preferencial