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!

48 comentários, deixe o seu

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Imagem de espaço reservado de Alvaro Ortiz dito

    Ugh ... um pouco confuso.

  2.   tônico dito

    * / 30 está faltando (no campo de minutos) que funciona a cada 30 minutos ...

    1.    erm3nda dito

      Eu ia comentar apenas isso até decidir revisar os comentários 😀
      Este modificador é uma informação muito importante e algo muito útil.

      1.    Kika dito

        Olá!
        No momento, estou testando uma configuração a cada 45 minutos.

        * / 45 * * * *, e a instrução é executada a 45 minutos de cada hora E a cada hora. Quer dizer:

        Ele é executado às 3:45, depois às 4:00, 4:45, depois às 5:00, 5:45, 6:00, 6:45 e assim por diante.

        Há algo errado? O que posso fazer para que seja apenas a cada 45 minutos ou pelo menos uma vez a cada 45 minutos a cada hora.

    2.    Kika dito

      Olá!
      No momento, estou testando uma configuração a cada 45 minutos.

      * / 45 * * * *, e a instrução é executada a 45 minutos de cada hora E a cada hora. Quer dizer:

      Ele é executado às 3:45, depois às 4:00, 4:45, depois às 5:00, 5:45, 6:00, 6:45 e assim por diante.

      Há algo errado? O que posso fazer para que seja apenas a cada 45 minutos ou pelo menos uma vez a cada 45 minutos a cada hora.

  3.   Slack dito

    Olá super úteis as informações para esclarecer como funciona o cron.
    Bytes

  4.   Slack dito

    pra *

  5.   Caçador dito

    Excelente, obrigado por esclarecer como funciona o cron .. vamos colocar um pouco a mão 🙂

  6.   Jacob dito

    Esta linha, pelo que entendi, será executada às 10h15, corrija-me se eu estiver errado
    Bem, lá diz 10:15
    15 22 * * * usuário /home/user/scripts/update.sh

  7.   Agustin dito

    Olá! informação muito boa.
    Para executar um Script a cada meia hora, a linha que deve ser adicionada ao CronTab seria: "30 * * * * root Scrip.sh" Correto? Muito obrigado!

  8.   vamos usar linux dito

    Não. Se bem me lembro, para isso você deve colocar / 30 * * * * root Scrip.sh.
    Ou seja, adicione / antes de 30.
    Felicidades! Paulo.

  9.   Jonathan dito

    Olá, gostei do seu post, é muito completo mas queria te perguntar uma coisa.
    Estou tendo problemas com este comando e um como "at".

    Eu quero executar um script em um determinado momento e colocar

    em -f /home/mi_user/Desk/script.sh 18:08 exemplo

    e o script não é executado na tela, ou seja, no terminal, ele é executado em background?

    E com o cron acontece a mesma coisa comigo, edito o arquivo crontab com "crontab -e"

    no final adiciono esta linha:

    46 19 my_user /home/mi_user/Desk/script.sh

    e não faz nada, não mostra o script.

    Alguma sugestão? Muito obrigado e peço desculpas por qualquer inconveniente

    1.    vamos usar linux dito

      Para que o terminal apareça, pode ser necessário executar o terminal e passar o script como parâmetro.

      Por exemplo:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      O parâmetro a ser usado pode variar com base no emulador de terminal usado.

      Eu espero que dê certo.

      Abraço! Paulo.

  10.   patrecas dito

    A contribuição é apreciada.

    10 pontos !!

    salu2!!

  11.   Rodolfo dito

    Muito obrigado, me ajudou muito a esclarecer algumas coisas, muito obrigado, para mais detalhes ou dúvidas irei ao MAN PAGE, cumprimentos reiterados.

  12.   jahir dito

    cara muito obrigado, tenho lido e testado os exemplos. muito obrigado ... é muito compreensível. Saudações

  13.   geovanni dito

    Eu usei o ubuntu Server 12.04.2 LTS, e a versão do crontab que eu tenho, para deletar a lista de trabalhos do usuário é usado, crontab -r (e -l, como diz este manual). Claro que é por questão de versões.

    Por outro lado, uma vez eu executei apenas o crontab e assim me permitiu criar meu próprio arquivo de execução, mas este não era o que estava sendo executado. O que roda é o que está em / etc / crontab. talvez alguém use o comentário.

    PS (Eu pesquisei com o comando locate e whereis crontab mas ele só retornou o endereço mencionado e outro arquivo que está criptografado, então se o que foi executado foi aquele em / etc / crontab, mas ao executar o comando crontab -e, o meu apareceu com todos os jobs que eu defini) onde esse arquivo estava sendo armazenado '???? Saudações. Eu sempre logo como root.

  14.   Sebastian dito

    Excelente, muito útil !!!

  15.   mmm dito

    Olá, gostaria de fazer isso ………… «15 10 * * * root ifdown eth0»

    ou seja, a certa hora a placa de rede desliga ………… bem, coloquei no crontab e não funcionou …… .. e aí?

    Saludos y gracias

  16.   Miguel dito

    Você perdeu a definição de "mon" após o título "Adicionar tarefas ao crontab"

    O artigo ainda é bom, o cron é extremamente útil.

  17.   Óscar dito

    Que legal foi esse post bom, me pergunte
    Se eu quiser acompanhar os registros deixados pela execução de tarefas, onde posso vê-los?

    é para decidir que quero ver o histórico das ações feitas no passado deste arquivo e quero ver quem o modificou e a data

    obrigado

  18.   oscar dito

    Eu quero verificar o histórico de modificação deste

    como posso fazer

    obrigado

  19.   Andres Ledo dito

    Bom Dia,

    Eu acho que no script do ubuntu você cometeu um erro, você colocou ap-get -y upgrade em vez de apt-get -y upgrade. (Você deixou um t).

    Uma saudação.

    1.    vamos usar linux dito

      Assim é. Obrigado!
      Abraço! Paulo

  20.   Gabriel dito

    Quero saber como criar um arquivo cron para poder especificar a hora de cada execução, o diretório, etc.

  21.   Valentin dito

    Obrigado por esclarecer a operação e os comandos básicos do cron, agora, para se divertir um pouco.

  22.   Sander dito

    Sempre que procuro informações sobre algum assunto relacionado ao Gnu / Linux, dou voltas e voltas para sempre encontrar em 90% dos casos o melhor tutorial desta grande comunidade, acho que a partir de agora vou começar aqui e depois em outro lugar.

    lembranças

    1.    vamos usar linux dito

      Obrigado Sander! Um abraço! Paulo.

  23.   dario dito

    dom = dia do mês
    dow = dia da semana
    é mais fácil se você associar

  24.   Pascal dito

    Muito obrigado este muito completo e bem explicado.

  25.   Maxilia dito

    Isso é a mesma coisa que meu professor de SO nos deu, eu não mudo nada, agora eu vejo porque a aula está tão ruim .-. Bem, isso é o mesmo que dever de casa xD

  26.   Marcelo dito

    Caro,

    Consulta, o tempo de duração de uma tarefa pode ser limitado?
    Por exemplo, eu tenho uma tarefa que se repete a cada 5 minutos, na repetição se essa tarefa ainda estiver ativa, mate-a e execute novamente.

    graças,
    Marcelo.-

    1.    vamos usar linux dito

      Olá, Marcelo!

      Acho que seria melhor se você levantasse esta questão em nosso serviço de perguntas e respostas chamado perguntar DesdeLinux para que toda a comunidade possa ajudá-lo com seu problema.

      Um abraço, Pablo.

  27.   aj dito

    bom post.
    Qual é o comando por terminal para adicionar tarefas ao crontab (sem entrar no crontab e adicioná-las manualmente com 'crontab -e' ou substituir o crontab por outro crontab com 'arquivo crontab').
    A ideia é criar um script externo para adicionar as tarefas ao crontab
    obrigado

    1.    david dito

      parece-me que você poderia usar 'echo' tudo o que você deseja adicionar '| cat >> 'caminho do cronotab (/ etc / cronotab)' «

  28.   Rafael vera dito

    Como uma expressão seria executada a cada 3 dias exatamente

  29.   José Antonio dito

    Olá.

    Eu tenho um problema ao executar um cron job.

    Eu executo a seguinte tarefa com cronta -e:

    01 * * * * root /home/user/script/myfile.sh

    mas a tarefa não está concluída. Eu verifiquei se myfile.sh tem permissão de execução e se o usuário que o executa é root.

    Eu executo a mesma tarefa em / etc / crontab e depois de reiniciar o serviço, também não funciona para mim.
    O conteúdo de myfile.sh é um comando que atualiza um banco de dados e se eu executar no console ele funciona.
    alguma ideia de qual pode ser o problema?

    1.    fredd dito

      O usuário do banco de dados pode não ter todas as permissões e primeiro você terá que exportar as variáveis ​​de ambiente do mecanismo de banco de dados.
      Por exemplo, no db2 esta linha iria para o início do script
      . / home / db2inst1 / sqllib / db2profile

      Outra causa pode ser que o script requer conexão com o banco de dados, faça a conexão com o banco de dados dentro do script

  30.   LA3 dito

    Não sabia que tinha que reiniciar o crond, já vinha lutando com isso há um tempo

  31.   kenia dito

    Eles saberão indicar que a tarefa é executada todo final de mês, na hora indicada .. o detalhe é que não consigo como sei tirar o último dia de cada mês .. ??? Tive que anotar um a um mas quando chega o fim do mês de fevereiro que é biciesto é complicado ...

  32.   Jesus dito

    bom Dia!!

    Como faço para parar o processo que está sendo executado no crontab?

  33.   Jesus dito

    processo * …………

  34.   Julianna dito

    Será que você pode me ajudar? eu tenho um script da minha autoria que não funciona no crontab! jб dei todas as permissões, nenhum cron particular específico ou usuário que possa executá-lo - quase nada acontece! Gostaria de saber se vocês podem me ajudar, outras coisas funcionam sem cron! Vlws

  35.   Anthox dito

    Como você colocaria uma tarefa para ser executada no último dia do mês (dias: 31-30-28)?

  36.   tfercho dito

    Como você sabe, o comando su é usado para alterar o usuário em um console. Se eu usar o comando su assim: "seu usuário" altere o usuário, mas sem as configurações adequadas de "usuário", se eu executar o su como: "su - usuário" altere o usuário carregando as configurações do usuário. Com o cron indico o usuário, mas como carrego as configurações deste usuário?

  37.   Rob dito

    E se eu quiser parar?

  38.   Regi dito

    Olá,
    Não sei o que estou fazendo de errado, mas sigo os passos e nada é executado. Provei:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    e absolutamente nada. Não executa nada. Eu reiniciei e tudo mais.

  39.   Ferqos dito

    muito obrigado