shell-scriptshell-script
Spread the love

Este post tem a pretensão de dar uma rápida introdução ao cron — e cobrir o básico de tudo o que ele é capaz de fazer para você.

O que é o cron?

Cron é o nome do programa que permite aos usuários do Unix/Linux executar comandos ou scripts (grupos de comandos) automaticamente em um determinado horário/data.

É comumente usado pelos administradores de sistemas para programar a execução de suas tarefas administrativas – como o backup.

Vamos ver, aqui, como funciona o Cron.

Como iniciar o cron

cron é um daemon, o que significa que ele é um serviço que é iniciado uma vez (usualmente, quando o sistema é ligado), entra em stand by e, na hora certa, executa a(s) tarefa(s) programada(s) – usualmente, em background, ou seja, nos bastidores do sistema.

Outro exemplo de daemon é o servidor FTP, que fica em stand by, quando não está sendo usado.

Como usar o cron

Dentro do diretório /etc/, é possível encontrar subdiretórios chamados cron.hourly/, cron.weekly/, cron.daily/, cron.monthly/. O princípio é simples, assim – ao copiar um script para dentro de um destes diretórios, ele será executado a cada hora (hourly), a cada semana(weekly), a cada mês (monthly). A frequência com que o script será executado, depende do nome do diretório, portanto.

cat/etc/crontab

Explicando o arquivo crontab

As primeiras linhas, do arquivo, definem algumas variáveis usadas pelo cron. A segunda parte é a que exige um pouco mais de atenção. Vamos usar tabela para explicar a linha

# m h dom mon dow user  command
Item Descrição
m ou minute minuto – determina a quantos minutos, dentro de uma hora, o comando será executado. Os valores aceitos vão de 0 a 59.
h ou hour hora – determina a que hora o comando será executado e sua especificação segue o padrão 24h. Portanto, aceita valores entre 0 e 23 (sendo que 0 é meia-noite).
dom ou day of month dia do mês – determina o dia do mês em que o comando será executado. Se quiser que a tarefa seja executada no dia 25 do mês, use o valor 25.
mon ou month mês – determina o mês em que o comando será executado. Aceita tanto valores numéricos referentes aos meses do ano, como alfabéticos (e. g. August).
dow ou day of week dia da semana – aceita tanto valores numéricos de 0 a 7, como caracteres: sun, mon, tue, wed, thu, fri e sat, que correspondem, respectivamente a domingo, segunda, terça, quarta, quinta, sexta e sábado.
user usuário – determina o usuário do sistema sob cujos privilégios o comando irá ser executado
cmd ou command comando – determina o comando a ser executado.
Notas:
  • Nos campos em que você não deseja fixar valor algum, pode inserir um asterisco ‘*’.
  • No campo dow, dia da semana, tanto 0 como 7 correspondem a domingo
  • Caso você determine valores para dom e para dow, o sistema não entra em conflito. O cron executa o comando nos dois casos
  • O Vixie Cron aceita listas. O que significa que você pode enumerar especificamente, por exemplo, os dias da semana em que você deseja que um script seja disparado. Veja um exemplo:
  • Se você preferir, pode usar assim:
  • Você também pode “pular” números. Veja como:
  • se você usar o valor */2 no campo dom, o comando irá rodar a cada 2 dias.
  • */5, no campo de horas, fará com que o comando seja executado a cada 5 horas
  • Os nomes dos meses e dos dias da semana não são sensíveis à caixa. Ou seja, tanto faz escrever Jul como jul. O importante é que você use apenas as 3 primeiras letras do dia da semana ou do nome do mês.
  • Você pode (e deve) inserir comentários para explicar o que está fazendo. Para isto, basta usar um ‘#’ no início da linha comentada.

O crontab é multiusuário

O Unix é um sistema, por natureza, multiusuário. Cada usuário que se conecta ao sistema pode, em tese, programar as próprias tarefas a serem executadas pelo sistema.

Assim, você, que tem um blog WordPress instalado em um servidor – que te forneça acesso SSH – pode programar um backup e determinar a frequência com que ele irá ocorrer.

Para começar a personalizar o seu próprio crontab, use o comando:

crontab -e

O sistema irá abrir o seu editor de textos padrão.

Se você quiser usar o vim também, para editar o crontab execute o seguinte comando:

vim /etc/crontab

Note que o seu crontab “particular” segue os padrões do arquivo /etc/crontab do sistema.

Uma vez terminada a edição, o cron faz a verificação sintática e permite corrigir possíveis erros. Se tudo estiver bem, é só deixar rolar.

Outros editores de texto

Usuários que se sintam mais confortáveis com outros editores de texto, podem fazer a edição no aplicativo da sua preferência.

Depois de concluído, é só usar o comando crontab para substituir o seu arquivo crontab atual pelo arquivo que você acabou de criar.

59 11 * * 1-5 root backup.sh

onde 1 – 5 significa de segunda a sexta

59 11 * * 1,2,3,4,5 root backup.sh
irá executar o script backup.sh toda segunda, terça, quarta, quinta e sexta, às 11:59

É possível ter mais flexibilidade no modo como a tarefa será executada, através da edição do arquivo /etc/crontab. Em um típico servidor Debian, este arquivo tem a seguinte aparência:

cat /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin</p>
# m h dom mon dow user command
17 * * * * root cd / &amp;&amp; run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.monthly )
#Fim do Arquivo

Vamos supor que você tenha escrito as definições em um arquivo chamado meu.arquivo.cron, o comando a ser usado é o seguinte:

Outros usos
crontabmeu.arquivo.cron

Para listar as definições atuais do crontab:

crontab -l

Para apagar e remover o seu crontab atual:

Como restringir acesso ao crontab:

crontab -r

Quem é administrador de um sistema pode impedir que usuários tenham acesso ao cron. Você pode inserir, no arquivo /etc/cron.allow os usuários que têm permissão de alterar o crontab. O arquivo /etc/cron.deny é onde são inscritos os usuários que terão seu acesso negado ao serviço.

Uma maneira de restringir quase todos e permitir o acesso a alguns é adicionar a linha ALL ao /etc/cron.deny e ir acrescentando um a um os usuários aos quais você deseja liberar o acesso em /etc/cron.allow.

Veja como restringir o acesso de todo mundo ao serviço:

echoALL &gt;&gt; /etc/cron.deny

Para permitir o acesso à usuária lucas, use o comando:

echo lucas &gt;&gt; /etc/cron.allow

Na ausência de qualquer um destes dois arquivos, o uso do cron, no sistema, é irrestrito — ou seja, todo mundo pode usar.

Se você tiver apenas o arquivo /etc/cron.allow e, nele, inscrever a usuária lucas, o sistema vai entender que todos os outros usuários estão proibidos e somente esta poderá fazer uso do serviço.

Você pode verificar o arquivo, no seu sistema, com o seguinte comando:

echo lucas &gt;&gt; /etc/cron.allow
Na ausência de qualquer um destes dois arquivos, o uso do cron, no sistema, é irrestrito — ou seja, todo mundo pode usar.

Se você tiver apenas o arquivo /etc/cron.allow e, nele, inscrever a usuária lucas, o sistema vai entender que todos os outros usuários estão proibidos e somente esta poderá fazer uso do serviço.

By Lucas Rodrigues Monteiro

Bacharel em Sistemas da Informação, Certificado MCTS 70-680 / MOS, Trabalho como Administrador de Redes, Firewall e Servidores Windows e Linux! Minhas atividades favoritas são: Caminhar, Fazer Trilhas, Natureza, Insetos e claro ler sobre Tecnologia.

Deixe um comentário

Translate »