Como usar o Cron no Linux Unix

O que é cron?


Cron é o nome do programa que permite que usuários Linux / Unix executem comandos ou scripts (grupos de comandos) automaticamente em uma hora ou data específica. Normalmente é usado para comandos de tarefas administrativas, como backups, mas pode ser usado para executar qualquer coisa. Conforme definido nas páginas do manual do cron; é um daemon que executa programas agendados.
Em praticamente todas as distribuições Linux é utilizada a versão Vixie Cron, por quem a desenvolveu, que é Paul Vixie, um dos grandes gurus do Unix, também criador, entre outros sistemas, do BIND que é um dos servidores DNS mais populares no mundo.

Iniciar cron


Cron é um daemon (serviço), o que significa que só precisa ser iniciado uma vez, geralmente com a mesma inicialização do sistema. O serviço cron é denominado crond. Na maioria das distribuições, o serviço é instalado automaticamente e iniciado na inicialização do sistema, podendo ser verificado de várias maneiras:
 1) status etc / rc.d / init.d / crond 2) /etc/init.d/crond status crond (pid 507) está em execução… 
Caso você tenha o comando de serviço instalado:
 status crond do serviço
 crond (pid 507) está em execução … 
também pode ser revisado por meio do comando ps:
 ps -ef | grep crond
se por algum motivo o cron não estiver funcionando, podemos iniciá-lo com:
 /etc/rc.d/init.d/crond start Iniciando crond: [OK]
[color = rgb (0,0,0)] Se o serviço não foi configurado para começar do início, bastaria adicioná-lo com o comando chkconfig: [/ color]
 chkconfig --level 35 crond on 
Com isso, você o adicionaria para executar os níveis 3 e 5, de modo que inicie no momento da inicialização do sistema.

Usando cron


Existem pelo menos duas maneiras diferentes de usar o cron:
O primeiro está no diretório / etc, onde você provavelmente encontrará os seguintes diretórios:
  • cron.horas
  • cron.daily
  • cron.weekly
  • cron.monthly
Se um arquivo de script for colocado em qualquer um desses diretórios, o script será executado a cada hora, todos os dias, todas as semanas ou todos os meses, dependendo do diretório.
Para que o script seja executado, ele deve ser algo semelhante ao seguinte:
 #! / bin / sh #script que gera um backup cd / usr / documentos tar czf * backup cp backup / other_directory /
Devemos consertar que a primeira linha começa com #!, O que indica que é um script de shell bash, as outras linhas são os comandos que queremos que o script execute. Este script pode ser nomeado por exemplo backup.sh e também devemos alterar as permissões correspondentes para que ele possa ser executado, por exemplo:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 Jul 20 09:30 backup.sh
O "x" no grupo de permissão do proprietário (-rwx) indica que ele pode ser executado.
Se deixarmos esse script em cron.hourly, ele será executado a cada hora com um minuto de cada dia, depois explicarei o porquê.
A segunda maneira de executar ou usar o cron é manipulando diretamente o arquivo / etc / crontab. Na instalação padrão de várias distribuições do Linux, esse arquivo será parecido com o seguinte:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 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
As primeiras quatro linhas são variáveis ​​que indicam o seguinte:
CONCHAÉ o 'shell' sob o qual o cron é executado. Se não for especificado, aquele indicado na linha / etc / passwd correspondente ao usuário que está executando o cron será usado como padrão.
CAMINHOContém ou indica o caminho para os diretórios nos quais o cron procurará o comando a ser executado. Este caminho é diferente do caminho global do sistema ou do usuário.
CORREIO PARAÉ para quem a saída do comando é enviada (se houver alguma saída). O Cron enviará um e-mail para quem estiver especificado nesta variável, ou seja, deve ser um usuário válido do sistema ou de algum outro sistema. Se não for especificado, o cron enviará o e-mail ao usuário que possui o comando sendo executado.
CASAÉ o diretório raiz ou principal do comando cron, se não for indicado então, a raiz será aquela indicada no arquivo / etc / passwd correspondente ao usuário que executa o cron.
O comentários são indicados com # no início da linha.
Após o acima, vêm as linhas que executam as tarefas devidamente programadas. Não há limites para o número de tarefas que pode haver, uma por linha. Os campos (São 7) que formam essas linhas são formadas da seguinte forma:
 Minuto Hora DayOfMonth Mês DayOf Week Comando do usuário
  • Campo: Descrição
  • Minuto: Controla o minuto da hora em que o comando será executado, este valor deve estar entre 0 e 59.
  • Tempo: Controla a hora em que o comando será executado, é especificado no formato 24 horas, os valores devem estar entre 0 e 23, 0 é meia-noite.
  • Dia do mês: Dia do mês em que deseja executar o comando. Por exemplo, 20 seria indicado, para executar o comando no dia 20 do mês.
  • Mês: Mês em que o comando será executado, pode ser indicado numericamente (1-12), ou pelo nome do mês em inglês, apenas as três primeiras letras.
  • Dia da semana: Dia da semana em que o comando será executado, pode ser numérico (0-7) ou pelo nome do dia em inglês, apenas as três primeiras letras. (0 e 7 = domingo)
  • Do utilizador: Usuário que executa o comando.
  • Comando: Comando, script ou programa que você deseja executar. Este campo pode conter várias palavras e espaços.
Um asterisco * como valor nos primeiros cinco campos indicará o início-fim do campo, ou seja, tudo. Um * no campo dos minutos indicará todos os minutos.
Para entender melhor os 5 primeiros campos e o asterisco, usarei melhor vários exemplos:
Exemplo:
 Descrição 01 * * * * Funciona a 1 minuto a cada hora de todos os dias 158 * * * Às 8h15. todos os dias 15 20 * * * Às 20:15 de cada dia 00 5 * * 0 Às 5 da manhã todos os domingos * 5 * * dom. Todos os minutos a partir das 5:00 da manhã. às 5:59 da manhã todos os domingos 45 19 1 * * Às 19h45 1º dia de cada mês 01 * 20 7 * A 1 minuto de cada hora em 20 de julho 10 1 * 12 1 À 1:10 am. Todas as segundas-feiras em dezembro 00 12 16 * Quarta Ao meio-dia do dia 16 de cada mês e isso é quarta-feira 30 9 20 7 4 Às 9h30. de 20 de julho e que é quinta-feira 30 9 20 7 * Às 9h30 de 20 de julho, independentemente do dia da semana 20 * * * 6 Ao 20º minuto de cada hora aos sábados 20 * * 1 6 Ao 20º minuto de cada hora aos sábados em janeiro 
Também é possível especificar listas nos campos. As listas podem ser na forma de 1,2,3,4 ou na forma de 1-4, o que seria o mesmo. O Cron, da mesma forma, apóia aumentos nas listas, que são indicados a seguir:
 Valor ou lista / incremento
Novamente, listas e incrementos são mais fáceis de entender com exemplos:
Exemplo:
 Descrição 59 11 * 1-3 1,2,3,4,5 Às 11h59 Segunda a sexta-feira, janeiro a março 45 * 10-25 * 6-7 Aos 45 minutos de todas as horas de 10 a 25 de todos os meses e que o dia seja sábado ou domingo 10,30,50 * * * 1,3,5 Às 10, 30 e 50 minutos de todas as horas na segunda, quarta e sexta-feira * / 15 10-14 * * * A cada quinze minutos a partir das 10:00 às 14h00 * 12 1-10 / 2 2,8 * Todos os minutos das 12 horas, nos dias 1,3,5,7 e 9 de fevereiro e agosto. (O incremento no terceiro campo é 2 e começa em 1) 0 * / 5 1-10,15,20-23 * 3 A cada 5 horas dos dias 1 a 10, dia 15 e do dia 20 a 23 de cada mês e que o dia é quarta-feira 3/3 2/4 2 2 2 A cada 3 minutos começando no minuto 3 (3,6,9, etc.) das horas 2,6,10, etc. (a cada 4 horas começando na hora 2) em 2 de fevereiro e esta é terça-feira
Como pode ser visto no último exemplo, a tarefa cron que foi atribuída àquela linha com aqueles dados, só seria executada se os 5 campos (AND) fossem atendidos. Ou seja, para que a tarefa seja executada, ela deve ser na terça-feira, 2 de fevereiro, às 02h03. É sempre um booleano AND que só retorna verdadeiro se todos os 5 campos forem verdadeiros no minuto específico.
[color = rgb (0,0,0)] O caso anterior deixa claro que: [/ color]
O programa cron é invocado a cada minuto e executa as tarefas em que seus campos são preenchidos naquele exato minuto.
Incluindo o campo do usuário e o comando, as linhas do crontab poderiam ser as seguintes:
 0 22 * ​​* * root / usr / backup diário.sh 0 23 * * 5 root / usr / backup semanal.sh 0 8.20 * * * jcarrillo mail -s "sistema em execução" [email protected]
As duas primeiras linhas são executadas pelo usuário root e a primeira executa às 22h00 todos os dias o script que gera um backup diário. O segundo executa às 23h todas as sextas-feiras um script que gera um backup semanal. A terceira linha é executada pelo usuário sergio e seria executada às 8 da manhã e 8 da noite de todos os dias e o comando é enviar um email para a conta [email protected] com o assunto "sistema funcionando", uma forma de um administrador saber que um sistema remoto está ativo nos horários especificados, mas se ele não receber um e-mail nesses horários, algo está errado.
Sendo root, então é possível, modificar diretamente o crontab:
 vim / etc / crontab 
Isso é modificado diretamente.

Executando o Cron com vários usuários, comando crontab


Linux é um sistema multiusuário e o cron é um dos aplicativos que permitem trabalhar com vários usuários ao mesmo tempo. Cada usuário pode ter seu próprio arquivo crontab; na verdade, o / etc / crontab é considerado o arquivo crontab do usuário root, embora não haja problema de que outros usuários sejam incluídos e, portanto, o sexto campo que indica precisamente quem é o usuário. que executa a tarefa e é necessária em:
 / etc / crontab

Mas quando usuários normais (e até mesmo root) deseja gerar seu próprio arquivo crontab, então usaremos o comando crontab.
No diretório / var / spool / cron (pode variar dependendo da distribuição), um arquivo cron é gerado para cada usuário, embora esse arquivo seja um texto, ele não deve ser editado diretamente.
Existem então duas situações, gerando diretamente o arquivo crontab com o comando:
 crontab -e
Com o qual o editor padrão será aberto (geralmente vi) com o arquivo chamado crontab vazio e onde o usuário entrará em sua tabela de tarefas e será automaticamente salvo como / var / spool / cron / user.
O outro caso é que o usuário edita um arquivo de texto normal com as entradas das tarefas e como um exemplo o nomeia 'my_cron', então o comando $> crontab my_cron será o encarregado de estabelecê-lo como o arquivo cron do usuário em / var / spool / cron / user:
 vi my_cron # exclui arquivos da pasta compartilhada 0 20 * * * rm -f / home / sergio / shared / * # executa um script que executa um backup da pasta de documentos no primeiro dia de cada mês 0 22 1 * * / home / sergio / mensal support.sh # a cada 5 horas de segunda a sexta, ele verifica se as permissões estão corretas na minha casa 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (o arquivo)> ls my_cron> crontab my_cron (definido como / var / spool / cron / user)
Resumindo o acima e considerando outras opções para crontab:
 crontab file.cron (definirá o arquivo.cron como o crontab do usuário) crontab -e (abrirá o editor predefinido onde o arquivo crontab pode ser criado ou editado) crontab -l (lista o crontab atual do usuário, seus trabalhos cron) crontab -r (remove o crontab atual do usuário)
Em algumas distribuições, ao editar crontabs de usuários regulares, é necessário reiniciar o serviço para que os arquivos crontab em / var / spool / cron possam ser relidos.
 reiniciar crond de serviço 
Para entender melhor como iniciar / parar / reiniciar serviços, neste artigo você encontrará mais informações.

Controlando o acesso ao cron


O Cron permite que você controle quais usuários podem ou não usar os serviços cron. Isso é feito de forma muito simples por meio dos seguintes arquivos:
  • /etc/cron.allow
  • /etc/cron.deny
Para evitar que um usuário use o cron ou melhor, o comando crontab, basta adicionar seu nome de usuário ao arquivo /etc/cron.deny, para permitir seu uso, então seria adicionar seu nome de usuário a /etc/cron.allow, se por alguma razão você quiser negar o uso do cron a todos os usuários, então você pode escrever a palavra ALL no início do cron.deny e isso seria suficiente.
 echo ALL >> /etc/cron.deny ou para adicionar outro usuário a cron.allow echo juan >> /etc/cron.allow
Se nem o arquivo cron.allow nem o arquivo cron.deny existirem, em teoria o uso do cron é feito sem restrições do usuário. Adicionar nomes de usuário em cron.allow, sem criar um arquivo cron.deny, terá o mesmo efeito que criá-lo com a palavra ALL. Isso significa que, uma vez que o cron.allow tenha sido criado com um único usuário, os outros usuários que desejam usar o cron sempre terão que ser especificados neste arquivo.
ConclusõesJá falamos sobre seu funcionamento, espero que você tenha entendido, algumas distribuições como o Red Hat incluem uma variante como o anacron que pode suprir algumas deficiências do cron, mesmo assim, em qualquer nível do mais básico ao mais avançado, o cron é usado , é aconselhável compreender o seu funcionamento. Se você encontrar alguma dúvida ou tiver uma sugestão, não hesite em colocá-la nos comentários.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave