Como agendar tarefas no Linux com Cron e Crontab

A capacidade de automatizar tarefas é uma daquelas tecnologias futuristas que já estão aqui. Todo usuário do Linux pode se beneficiar do agendamento de tarefas do sistema e do usuário, graças ao cron, um serviço em segundo plano fácil de usar.

A capacidade de automatizar tarefas é uma daquelas tecnologias futuristas que já estão aqui.  Todo usuário do Linux pode se beneficiar do agendamento de tarefas do sistema e do usuário, graças ao cron, um serviço em segundo plano fácil de usar.
Propaganda

Você sabia que Blade Runner foi lançado em 2019? Isso é daqui a três anos! Sem mencionar o Back to the Future 2, onde eles viajam no tempo até 2015. Ainda não temos carros voadores e não há replicantes entre nós (até onde eu sei).

linux-cron-jobs-quote

É fácil sentir-se desapontado com a tecnologia atual quando a comparamos a representações fictícias do futuro. Ainda assim, nos dias de hoje, nossos telefones, computadores e até mesmo casas podem fazer coisas incríveis 5 projetos de automação residencial para começar com sua casa inteligente Quando se trata de criar casas inteligentes, a maioria das pessoas só não sei por onde começar. Aqui estão cinco projetos básicos para iniciantes que você pode construir agora mesmo. Consulte Mais informação . A capacidade de automatizar tarefas é uma delas.

Todos os usuários do Linux podem se beneficiar de tarefas de agendamento, sejam elas relacionadas ao sistema (como limpar logs antigos e atualizar pacotes Como atualizar um ou todos os aplicativos no Linux em segundos Como atualizar um ou todos os aplicativos no Linux em segundos O terminal do Linux simplifica a atualização de um único aplicativo em seu computador ou a aplicação de todas as atualizações disponíveis de uma vez (veja como. Leia mais) ou atenda o usuário (verificando e-mails, baixando podcasts ...). Os usuários do Windows tiveram tarefas chatas que você pode automatizar com o Agendador de Tarefas do Windows 4 Tarefas chatas que você pode automatizar com o Agendador de Tarefas do Windows Seu tempo é muito valioso para ser desperdiçado com tarefas repetitivas. Vamos mostrar como automatizar e agendar tarefas. Também temos ótimos exemplos. Leia mais desde o Windows 95. O utilitário que faz o mesmo trabalho no Linux é chamado cron e aqui explicaremos como usá-lo.

O que é o Cron?

Cron é um serviço do sistema que é executado em segundo plano, verifica as tarefas agendadas e as executa se encontrar alguma. As tarefas - também chamadas de "cron jobs" 5 Iniciante Linux Setup Idéias para Cron Jobs e Shell Scripts 5 Iniciante Linux Setup Idéias para Cron Jobs e Shell Scripts Com bash scripting, você pode fazer uma série complexa de tarefas de uma só vez, então é ótimo para necessidades elaboradas e repetitivas. É também uma ótima maneira de conhecer o terminal. Read More ”- são definidos em arquivos de configuração especiais (crontabs), que o cron analisa a cada minuto. Várias versões do cron podem ser encontradas em diferentes distribuições do Linux. Por exemplo, o fork do cron do Fedora é chamado cronie, e também há fcron, bcron e dcron. Alguns têm recursos extras, enquanto outros são mais focados em segurança, mas todos são baseados na mesma ideia.

Este guia foi escrito para vixie-cron, que é a versão mais difundida do cron e a que você encontrará no Ubuntu e seus derivados. Embora a maioria das instruções se aplique a outras implementações do cron também, pode haver pequenas diferenças, portanto, verifique seus manuais se decidir mudar.

O que é um Crontab?

Se você é sério sobre como gerenciar seu tempo, você provavelmente tem um calendário de algum tipo Organize seu tempo com esses 4 aplicativos de calendário do Linux Organize seu tempo com esses 4 aplicativos de calendário do Linux Faz sentido ainda usar um aplicativo de calendário de desktop? Achamos que sim, especialmente para permitir o acesso a eventos em qualquer dispositivo sincronizado. Esses aplicativos de calendário do Linux são particularmente úteis. Leia mais - um aplicativo ou pelo menos um pedaço de papel. O Crontab é muito parecido com o calendário do seu computador. Ele contém as informações sobre as tarefas agendadas, informando ao cron quais comandos devem ser executados em que horário.

Na verdade, vários crontabs estão no seu sistema. Cada usuário tem seu próprio crontab, incluindo root (o administrador). Os crontabs do usuário são armazenados em /var/spool/cron/crontabs/ . O comando crontab -l listará o arquivo crontab para o usuário atual. Você pode verificar o crontab raiz com sudo crontab -l .

Além disso, há o arquivo crontab do sistema /etc/crontab que é usado para tarefas de todo o sistema. Geralmente, eles assumem a forma de scripts executáveis, de propriedade da raiz, colocados em /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ e /etc/cron.monthly/ folders e em algumas distribuições, a pasta /etc/cron.d/ também. De um modo geral, você não deveria ter que lidar com essas tarefas, já que a maioria delas é criada automaticamente por aplicativos instalados.

Como agendar tarefas com Cron

Parece simples: para agendar tarefas, basta adicioná-las ao seu crontab. Como o crontab é um arquivo de configuração especial, não é recomendável editá-lo manualmente. Em vez disso, use o comando crontab -e . Para editar crontabs root ou de outros usuários, execute o comando com privilégios administrativos e adicione seu nome de usuário após a opção -u:

sudo crontab -u root -e
sudo crontab -u username -e

linux-cron-jobs-crontab-editor

O arquivo crontab tem duas seções. O primeiro contém variáveis ​​de ambiente que são configuradas automaticamente. Você pode alterar com segurança as variáveis ​​PATH, HOME e SHELL e modificar a variável MAIL.

A segunda parte do arquivo é o "horário" real com suas tarefas agendadas. Cada tarefa ocupa uma linha (linha) na tabela, com colunas representando os seguintes valores:

linux-cron-jobs-crontab

Para agendar tarefas com sucesso, você precisa saber um pouco sobre a sintaxe do crontab:

  • Os números devem ser inteiros (números inteiros), e você pode usar o asterisco (*) em qualquer uma das colunas como um caractere curinga, significando “every minute / day / month…”.
  • Na coluna "Dia do mês", tenha cuidado para não definir uma data que não ocorra no mês especificado na coluna "Mês" (por exemplo, 30 de fevereiro).
  • As colunas "Mês" e "Dia da semana" aceitam nomes curtos para meses e dias, respectivamente, e não diferenciam maiúsculas de minúsculas.
  • Na coluna "Dia da semana", 0 e 7 significam domingo. A coluna "Hora" requer o formato "hora militar" (24 horas), mas você não pode usar o número 24 - em vez disso, 0 significa 12 horas. Isso ocorre porque os valores de minuto, hora e dia da semana começam em 0 em vez de 1.
  • Segundos não são suportados, então você não pode agendar uma tarefa em um determinado segundo.

O que você pode fazer é agendar intervalos de tempo inclusivos usando um hífen (14-22 em "Horas" executará a tarefa continuamente das 14h às 22h) ou executar uma única tarefa várias vezes definindo uma lista separada por vírgula (1, 3, 5 sob "Dia da semana" executará a tarefa na segunda, quarta e sexta-feira).

Enquanto isso, valores de etapa são representados por uma barra (/), e estes indicam a quantidade de saltos dentro de um intervalo; por exemplo, 3-20 / 3 em “Horas” executará a tarefa a cada três horas das 3h às 20h. Isto é útil quando você deseja repetir tarefas a cada X horas, porque você pode combinar um asterisco e um passo (* / X) Você pode combinar intervalos com listas e etapas com intervalos, desde que esteja usando números. Em outras palavras, combinações como "jan-mar" ou "Tue, Fri-Sun" não são permitidas.

Como alternativa, em vez de definir um valor para cada coluna, você pode escrever apenas @weekly, @yearly, @monthly, @daily ou @hourly no início de uma linha, seguido por um comando. Agendado assim, as tarefas serão executadas na primeira instância possível, portanto, @weekly será executado à meia-noite no primeiro dia da semana. Se você quiser executar uma tarefa imediatamente quando o sistema (re) iniciar, use o comando @reboot.

linux-cron-jobs-crontab-example

Neste exemplo, agendamos um backup todos os dias às 08:20 e 20:20. O papel de parede muda automaticamente a cada três dias às 19:00, e um script verifica novos podcasts Os 10 Melhores Aplicativos para Gerenciar Podcasts no Linux Os 10 Melhores Aplicativos para Gerenciar Podcasts no Linux O Linux não tem uma grande variedade de clientes de podcast, mas não se preocupe - quase todos os tocadores de música modernos para Linux podem servir como um podcatcher. Vamos dar uma olhada nas opções. Leia mais toda segunda-feira às 10:20 e 20:20. Um lembrete de aniversário está marcado para 25 de março e é executado a cada 30 minutos dentro do período de tempo especificado. Por fim, um script verifica o e-mail a cada 15 minutos de 8 a 20, mas apenas nos dias úteis. Você está livre para organizar seu crontab com espaços e tabulações entre colunas, mas não dentro delas (não coloque espaços entre vírgulas, hífens e barras).

Se tudo isso parece muito complicado, não se preocupe - você pode sempre confiar na internet. Ferramentas como Crontab Generator, Crontab.guru e Corntab ajudam você a criar tarefas agendadas sem conhecer qualquer sintaxe de crontab. Eles mostram quando o trabalho será executado em seguida e fornecem modelos para expressões comumente usadas. O Crontab.guru é o melhor do grupo, pois permite que você teste a sintaxe do crontab, para que você possa ver imediatamente como suas mudanças afetarão o cronograma.

linux-cron-jobs-crontab-guru

Como verificar se os trabalhos Cron são executados

Cron deve rodar silenciosamente em segundo plano e deixar você trabalhar sem ser perturbado enquanto cuida de suas tarefas. Mas como você pode ter certeza de que está realmente funcionando?

O Cron tem um recurso de notificação por e-mail embutido, mas isso requer a configuração de pelo menos um servidor de e-mail local simples. Como funciona um servidor de e-mail? [Tecnologia Explained] Como funciona um servidor de e-mail? [Technology Explained] Por trás de cada e-mail existe um mecanismo poderoso chamado servidor de e-mail, que envia os e-mails pela Internet. Consulte Mais informação . Não muitos usuários domésticos estão dispostos a configurar isso, e não muitas distribuições fornecem por padrão (por exemplo, o Ubuntu não). A maneira mais rápida de verificar o cron é verificar o log do sistema com este comando:

cat /var/log/syslog | grep -i cron

linux-cron-jobs-log

A opção -i torna nossa consulta insensível a maiúsculas e minúsculas. É possível que o cron tenha seu próprio arquivo de log em algum lugar em /var/log/, então olhe lá se este comando falhar em produzir resultados úteis.

Se você precisar salvar a saída de uma determinada tarefa cron, poderá redirecioná-la para um arquivo. Forneça o caminho e o nome do arquivo na última coluna do seu crontab, após o comando que você deseja executar:

30 * * * * /usr/bin/yourcommand>/home/username/logfile.txt

Usar um único símbolo> sobrescreverá o arquivo toda vez que o comando for executado. Para evitar isso, use >> em vez disso - ele anexa a saída ao arquivo existente.

E se Cron não está funcionando?

Pode acontecer de você adicionar algumas tarefas, verificar os logs do sistema e descobrir que elas não estão sendo executadas como deveriam. Aqui estão algumas coisas que você deve considerar - e tenha cuidado - ao tentar corrigir o problema.

O serviço cron está sendo executado?

Como você sabe, o daemon do cron deve estar rodando em segundo plano. Certifique-se de que este é realmente o caso. O serviço é chamado crond ou apenas cron.

Para distribuições usando o systemd:

systemctl status cron

Para distribuições usando Upstart:

service cron status

linux-cron-jobs-service-status

Se sua distribuição estiver usando a abordagem init “antiga” do System V, liste todos os serviços com:

initctl list

e veja se o cron está listado.

Você está autorizado a ter um arquivo crontab?

Verifique sua pasta /etc para arquivos chamados cron.allow e cron.deny . No Ubuntu, nem deveria existir, o que significa que todos os usuários podem gerenciar tarefas agendadas. No entanto, se houver um arquivo cron.allow, ele deverá conter seu nome de usuário. Por outro lado, se o arquivo cron.deny existir, seu nome de usuário não deve estar nele. Deixar o arquivo cron.deny branco significa que apenas o usuário root e os usuários listados no cron.allow podem ter arquivos crontab.

Suas variáveis ​​estão definidas corretamente?

O Crontab define automaticamente sua variável SHELL para /bin/sh . No entanto, se a sua casca de escolha é peixe 7 razões pelas quais você deve instalar o Fish Shell 7 razões pelas quais você deve instalar o Fish Shell Não gosta de como funciona o seu terminal Linux? Por que não instalar um novo shell? Uma delas é o peixe, que introduz características que deveriam ter se tornado comuns, mas não o fizeram. Vamos dar uma olhada. Leia mais ou bash, você deve mudar a variável SHELL . Da mesma forma, a variável PATH contém apenas alguns diretórios por padrão. É aqui que o crontab procura por comandos do Linux. Se a sua tarefa do cron não estiver funcionando, pode ser porque o crontab não “vê” o comando que você usou. Para evitar isso, adicione diretórios contendo os comandos à variável PATH, separados por dois pontos:

PATH=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Se você não quiser editar isso no seu crontab, você pode definir essas variáveis ​​no script que você deseja executar como um cron job.

Sua formatação do crontab está no ponto?

A sintaxe do Crontab não é exatamente suave. Mesmo que você o verifique com ferramentas on-line mencionadas anteriormente, um pequeno erro ainda pode impedir que o cron execute suas tarefas. Tenha cuidado para:

  • adicionar uma linha vazia no final do arquivo crontab
  • escape do sinal% com uma barra invertida se o seu comando incluir
  • escreva comentários como linhas separadas começando com #. Não escreva comentários na mesma linha que as variáveis ​​de ambiente, ou ao lado de comandos de tarefa cron.

Você realmente tem que usar o terminal?

Absolutamente não. Os usuários do KDE podem programar tarefas agendadas com o KCron, que pode ser acessado no módulo Configurações do sistema> Agendador de tarefas . Com uma interface simples que permite escolher e ajustar tudo em apenas alguns cliques do mouse, o KCron é um prazer de usar.

linux-cron-jobs-kcron

Se você preferir o GNOME, então o GNOME Schedule é para você. A abordagem é semelhante, embora a interface seja ligeiramente diferente. Ele oferece um modo avançado para modificações refinadas e vem com um applet de painel a partir do qual você pode gerenciar tarefas diretamente.

linux-cron-jobs-gnome-schedule

Você deve estar ciente de outras soluções, como o Crontab-UI e o Minicron. Eles são mais adequados para usuários que gerenciam várias máquinas e cron jobs, e um dos recursos mais interessantes deles é a interface baseada na web.

linux-cron-jobs-crontabui

Existem alternativas ao Cron?

Embora o cron seja praticamente o agendador de tarefas padrão para o Linux, agende e automatize tarefas no Linux com o Gnome Schedule Schedule e automatize tarefas no Linux com o Gnome Schedule Read More, certamente não é o único. O comando at é perfeito para tarefas rápidas e únicas que podem ser programadas diretamente da linha de comando, sem arquivos de configuração especiais. Se você precisar de mais, existe o GNUbatch, que introduz a noção de dependência. Com o GNUbatch, você pode definir condições específicas para cada trabalho ou fazer uma tarefa agendada depender de uma anterior. Algo semelhante pode ser alcançado com temporizadores systemd. Embora menos prático de configurar do que o cron, os timers do systemd podem lembrar se uma tarefa perdeu seu cronograma enquanto o computador estava desligado e executá-lo na próxima vez que estiver ligado.

Isso é algo que o cron não pode fazer sozinho. Como tal, é adequado para servidores e computadores que estão constantemente em execução, mas não executará um trabalho que foi agendado enquanto o computador estava desligado. É aqui que o anacron entra em jogo. Tecnicamente não é uma alternativa ou um substituto para o cron. Em vez disso, o anacron complementa o cron e deve ser usado junto com ele, como é o caso de muitas distribuições do Linux, incluindo produtos baseados no Ubuntu e no Ubuntu. Anacron registra quando uma tarefa foi executada pela última vez e verifica se houve alguma instância perdida enquanto o sistema estava desligado. Ele os executará quando você ligar o computador, mas todas as tarefas podem ser executadas apenas uma vez por dia.

Algumas versões do cron, como o fcron, oferecem recursos do anacron por padrão. Usuários avançados podem querer olhar para o Hcron ou SuperCron, que trazem muitas melhorias para funções básicas do cron, mas também são um pouco difíceis de gerenciar.

E se você? Como você organiza suas tarefas digitais? Quais tarefas você planeja no Linux? Compartilhe suas histórias e dicas para usar o cron nos comentários.

Crédito de imagem: placa do cronograma por Gonzalo Aragon via Shutterstock

In this article