Como agendar tarefas no Linux com Cron e Crontab

Como agendar tarefas no Linux com Cron e Crontab

Você sabia disso Blade Runner é definido em 2019? Isso é daqui a três anos! Para não mencionar De volta ao futuro 2 , onde eles viajam no tempo até 2015. No entanto, não temos carros voadores e não há replicantes entre nós (até onde eu sei).





É fácil ficar desapontado com a tecnologia atual quando a comparamos com representações fictícias do futuro. Ainda assim, hoje em dia nossos telefones, computadores e até mesmo casas podem fazer coisas incríveis. A capacidade de automatizar tarefas é uma delas.





Cada usuário Linux pode se beneficiar do agendamento de tarefas, sejam elas relacionadas ao sistema (como limpar registros antigos e atualizando pacotes ) ou atendendo ao usuário (verificando e-mail, baixando podcasts ...). Os usuários do Windows têm o Agendador de Tarefas desde o Windows 95. O utilitário que faz o mesmo trabalho no Linux é chamado cron e aqui vamos explicar como usá-lo.





como atualizar os serviços do Google Play

O que é Cron?

O Cron é um serviço do sistema executado em segundo plano, verifica as tarefas agendadas e as executa se encontrar alguma. As tarefas - também chamadas de 'tarefas cron' - são definidas em arquivos de configuração especiais (crontabs), que o cron verifica a cada minuto. Várias versões do cron podem ser encontradas em diferentes distribuições Linux. Por exemplo, o fork do cron do Fedora é chamado comparsa , e também há fcron , bcron , e dcron . Alguns têm recursos extras, enquanto outros são mais focados na 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 aquela 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, então verifique os manuais se você decidir mudar.



O que é um Crontab?

Se você leva a sério o gerenciamento de seu tempo, provavelmente tem algum tipo de calendário - 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, dizendo ao cron quais comandos executar em que horas.

Na verdade, vários crontabs estão em seu sistema. Cada usuário tem seu próprio crontab, incluindo o root (o administrador). Os crontabs do usuário são armazenados em





/var/spool/cron/crontabs/

. o

crontab -l

comando irá 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. Normalmente, eles assumem a forma de scripts de propriedade da raiz executáveis ​​colocados em

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, e

/etc/cron.monthly/

pastas, e em algumas distribuições, o

/etc/cron.d/

pasta também. De modo geral, você não deve ter que lidar com essas tarefas, pois a maioria delas é criada automaticamente por aplicativos instalados.

Como agendar tarefas com o Cron

Parece simples: para agendar tarefas, basta adicioná-las ao seu crontab. Como o crontab é um arquivo de configuração especial, não é recomendado editá-lo manualmente. Em vez disso, use o

crontab -e

comando. Para editar root ou crontabs 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

O arquivo crontab possui 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 'cronograma' real com suas tarefas agendadas. Cada tarefa ocupa uma linha (linha) na tabela, com colunas representando os seguintes valores:

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 'cada minuto / dia / mês ...'.
  • Na coluna 'Dia do mês', tome 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 representam domingo. A coluna 'Hora' requer o formato de 'hora militar' (24 horas), mas você não pode usar o número 24 - em vez disso, 0 significa 12h. Isso ocorre porque os valores para 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 é programar 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írgulas (1, 3,5 em 'Dia da semana' executará a tarefa na segunda, quarta e sexta-feira).

Enquanto isso, os valores da etapa são representados por uma barra (/) e 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 3h00 às 20h00 Isso é útil quando você deseja repetir tarefas a cada X horas, porque você pode combinar um asterisco e uma etapa (* / 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 'ter, sex-dom' não são permitidas.

Alternativamente, em vez de definir um valor para cada coluna, você pode simplesmente escrever @weekly, @yearly, @monthly, @daily ou @hourly no início de uma linha, seguido por um comando. Agendadas dessa forma, as tarefas serão executadas na primeira instância possível, então @weekly seria executado à meia-noite do primeiro dia da semana. Se você deseja executar uma tarefa imediatamente quando o sistema (re) iniciar, use o comando @reboot.

Neste exemplo, agendamos um backup todos os dias às 8h20 e 20h20. O papel de parede muda automaticamente a cada três dias às 19:00, e um script verificará se há novos podcasts todas as segundas-feiras às 10:20 e 20:20. Um lembrete de aniversário é definido 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, das 8 às 20, mas apenas nos dias úteis. Você é livre para organizar seu crontab com espaços e tabulações entre as colunas, mas não dentro delas (não coloque espaços entre vírgulas, hifens e barras).

Se tudo isso parece muito complicado, não se preocupe - você sempre pode contar com a internet. Ferramentas como Crontab Generator , Crontab.guru e Corntab ajudam a criar tarefas cron sem conhecer nenhuma sintaxe crontab. Eles mostram quando o trabalho será executado da próxima vez e fornecem modelos para expressões comumente usadas. Crontab.guru é o melhor do grupo porque permite que você teste a sintaxe do crontab ao vivo, para que você possa ver imediatamente como suas alterações afetarão a programação.

Como verificar se os cron jobs são executados

O Cron deve ser executado silenciosamente em segundo plano e permitir que você trabalhe 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 de e-mail embutido, mas isso requer a configuração de pelo menos um servidor de e-mail local simples. Poucos usuários domésticos estão dispostos a configurar isso, e nem muitas distribuições fornecem isso por padrão (por exemplo, o Ubuntu não). A maneira mais rápida de verificar o cron é verificar o registro do sistema com este comando:

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

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

/var/log/

, portanto, verifique se esse comando não produz resultados úteis.

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

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

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

E se o Cron não estiver funcionando?

Pode acontecer que você tenha adicionado algumas tarefas, verificado os logs do sistema e descoberto que eles não estão executando como deveriam. Aqui estão algumas coisas que você deve considerar - e ter cuidado - ao tentar corrigir o problema.

O serviço cron está em execução?

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

Para distribuições usando systemd:

systemctl status cron

Para distribuições usando Upstart:

service cron status

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

como saber se minha conta do Facebook foi hackeada
initctl list

e veja se cron está listado.

Você tem permissão para ter um arquivo crontab?

Verifique o seu

/etc

pasta para arquivos nomeados

cron.allow

e

cron.deny

. No Ubuntu, nenhum dos dois deve existir, o que significa que todos os usuários têm permissão para gerenciar tarefas cron. No entanto, se houver um

como hackear um cartão SIM para serviço gratuito
cron.allow

arquivo, ele deve conter seu nome de usuário. Por outro lado, se o

cron.deny

arquivo existe, seu nome de usuário não deve estar nele. Deixe o

cron.deny

arquivo em branco significa que apenas root e usuários listados em

cron.allow

pode ter arquivos crontab.

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

O Crontab configura automaticamente sua variável SHELL para

/bin/sh

. No entanto, se sua concha de escolha é peixe ou bash, você deve alterar 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 os comandos do Linux. Se o cron job não estiver executando, 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 deseja editar isso em seu crontab, pode definir essas variáveis ​​no script que deseja executar como um cron job.

A formatação do seu crontab está correta?

A sintaxe do Crontab não é exatamente um mar de rosas. Mesmo se você verificar isso com as ferramentas online mencionadas anteriormente, um pequeno erro ainda pode impedir o cron de executar seus trabalhos. Tenha cuidado para:

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

Você realmente precisa usar o terminal?

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

Se você prefere GNOME, então Agenda GNOME é para você. A abordagem é semelhante, embora a interface seja, como era de se esperar, um pouco diferente. Ele oferece um modo avançado para modificações refinadas e vem com um miniaplicativo de painel a partir do qual você pode gerenciar tarefas diretamente.

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

Existem alternativas para o Cron?

Embora o cron seja praticamente o agendador de tarefas padrão do Linux, certamente não é o único. o no comando é perfeito para trabalhos rápidos e únicos que podem ser agendados diretamente na linha de comando, sem arquivos de configuração especiais. Se você precisar de mais, há GNUbatch , que introduz a noção de dependência. Com o GNUbatch, você pode definir condições específicas para cada trabalho ou fazer com que uma tarefa agendada dependa de uma anterior. Algo semelhante pode ser alcançado com temporizadores do sistema . Embora menos práticos de configurar do que o cron, os cronômetros do systemd podem lembrar se uma tarefa perdeu sua programação enquanto o computador estava desligado e executá-la na próxima vez em que for 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 executa um trabalho que foi agendado enquanto o computador estava desligado. Aqui é onde 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, o que é o caso em muitas distribuições Linux, incluindo Ubuntu e produtos baseados no Ubuntu. O 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 novamente, mas todas as tarefas podem ser executadas apenas uma vez por dia.

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

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

Crédito da imagem: quadro de horários por Gonzalo Aragon via Shutterstock

Compartilhado Compartilhado Tweet O email 12 sites de vídeo melhores que o YouTube

Aqui estão alguns sites de vídeo alternativos ao YouTube. Cada um deles ocupa um nicho diferente, mas vale a pena adicioná-lo aos seus favoritos.

Leia a seguir
Tópicos relacionados
  • Linux
  • Linux
Sobre o autor Ivana Isadora Devcic(24 artigos publicados)

Ivana Isadora é escritora e tradutora freelance, amante do Linux e fã do KDE. Ela apóia e promove software de código aberto e gratuito e está sempre procurando por aplicativos novos e inovadores. Descubra como entrar em contato aqui .

Mais de Ivana Isadora Devcic

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever