
Apesar de muitos usuários de Windows conhecerem o “Agendador de tarefas”, poucos usam o recurso. Agendar a execução de tarefas porém, é fundamental quando falamos de administrar servidores e redes. Nesta matéria, veremos como é fácil executar comandos em dias e horários determinados, usando o sistema Linux em modo texto. Tarefa essencial para administradores, técnicos de rede e usuários avançados.
Apesar do modo texto, o agendamento de tarefas é mais fácil e intuitivo no Linux do que no Windows. Isso porque, quase todos os ajustes se concentram em um único local ou arquivo e cada agendamento ocupa uma linha deste arquivo, facilitando muito a manutenção.
Isso porém não torna os agendamentos no Linux pobres, pelo contrário, pode-se fazer desde uma agendamento para uma data e horário específicos até agendar a execução de tarefas minuto-a-minuto, com muita flexibilidade.
No Linux há um servidor exclusivo para cuidar dos agendamentos. O daemon do CRON é o responsável por controlar esse recurso que está disponível em praticamente todas as distribuições GNU/Linux genéricas.
Para controlar os agendamentos usamos tabelas chamadas “crontabs” que ficam localizadas normalmente em “/var/spool/cron/crontabs/”. Cada usuário tem seu próprio arquivo de agendamentos neste diretório e pode modificá-lo conforme sua necessidade, independente dos agendamentos dos outros usuários do sistema.
O principal agendamento disponível aqui é o do root (administrador). Para verificar os agendamentos do root, abra o arquivo “/var/spool/cron/crontabs/root” em um editor de textos planos como por exemplo o mcedit. Obviamente que somente o root pode modificar este arquivo…
mcedit /var/spool/cron/crontabs/root
Veremos então os agendamentos do root onde as linhas que iniciam com “#” são comentários e não interferem nos agendamentos. Estamos vendo aqui agendamentos padrão que são configurados na instalação do sistema.

Agendamentos do “sistema”
Outros usuários precisam usar um programa chamado crontab. O problema é que neste programa os agendamentos são editados com o uso do editor vi que é meio confuso para iniciantes. Eu, pessoalmente prefiro o mcedit. Abaixo estão alguns exemplos de uso do crontab:
- crontab -e – Cria/edita os agendamentos do usuário corrente.
- crontab -u geremias -e -> Edita os agendamentos do usuário “geremias”. Somente o root, além do usuário, pode fazer isso.
- crontab -d – Apaga todos os agendamentos do usuário corrente.
- crontab -l – Lista os agendamentos do usuário corrente.
- crontab -u geremias -l – Lista os agendamentos do usuário “geremias”. Somente o root, além do usuário, pode fazer isso.
Para saber mais sobre o crontab, use um dos comandos abaixo:
crontab --help
ou
man crontab
Criando agendamentos
Cada uma das linhas do arquivo de agendamentos, com exceção dos comentários, corresponde a um agendamento. É mais simples do que parece. O formato destas linhas é visto abaixo:
{min} {hor} {dia} {mes} {sem} {comando}
A linha é dividida em campos separados por um ou mais espaços. Abaixo esta a descrição de cada campo:
- {min} – Minutos. Aceita valores entre 0 e 59.
- {hor} – Horas no formato de 24 horas. Aceita valores entre 0 e 23.
- {dia} – Dia do mês. Aceita valores entre 1 e 31.
- {mes} – Mês. Aceita valores entre 1 e 12. Pode-se usar também as três primeiras letras do nome do mês em inglês como “jan”, “feb”, “mar”, etc.
- {sem} – Dia da semana. Aceita valores numéricos onde 0 = domingo, 1 = segunda, etc. ou as três primeiras letras do nome do dia da semana em inglês como “sun”, “mon”, “tue”, etc…
- {comando} – Aqui colocamos o comando que será executado.
Além dos valores de cada campo, existem outras possibilidades como por exemplo o “*” (asterístico) que significa “todos”. Veja um exemplo:
30 10 * * * updatedb
A linha acima agenda o comando “updatedb” para ser executado às 10:30 de todos os dias do mês de todos os meses e em todos os dias da semana. Veja abaixo porque:

É possível especificar vários valores no mesmo campo separando-os por vírgulas. Por exemplo, a linha abaixo executa o comando “rm -rf /var/mail/root” às 10:30, 12:30, 15:30 e 22:30, mas somente nas segundas e sextas-feiras:
30 10,12,15,22 * * 1,5 rm -rf /var/mail/root
Outra possibilidade é usar faixas de valores, separando os valores inicial e final por um “-” (traço ou menos). Veja o exemplo abaixo:
0,30 0-3,12 * * 1-5 rm -f /tmp/lixo
A linha acima executa o comando “rm -f /tmp/lixo” às 0:00, 0:30, 1:00, 1:30, 2:00, 2:30, 3:00 e 3:30 e também às 12:00 e 12:30, mas somente de segunda a sexta.
Podemos especificar intervalos de tempo também. A linha acima poderia ser substituída por:
*/30 0-3,12 * * 1-5 rm -f /tmp/lixo
Onde “*/30″ significa “de 30 em 30 minutos”. Veja outro exemplo:
*/10 */4,12 */3 * 1-6 date >> ~/teste
Esta linha executa o comando de 10 em 10 minutos, a cada 4 horas e também as 12 horas, a cada 3 dias, de segunda a sábado.
Mais possibilidades
Com esses exemplos vemos que é possível usar os vários métodos de agendamento no mesmo campo e no mesmo agendamento. Observe que também podem existir vários agendamentos entrelaçados e dentro do mesmo arquivo crontab como no arquivo abaixo:
# Meu crontab # 1o. agendamento 30 10,12,15,22 * * 1,5 echo ˝contador˝ # 2o. agendamento */10 */4,12 */3 * 1-6 date >> ~/teste # 3o. agendamento */30 0-3,12 * * 1-5 rm -f /tmp/lixo
Não se esqueça de salvar o arquivo e reiniciar o servidor cron para que ele aceite os novos agendamentos de imediato. Para isso, dê os comandos abaixo como root:
killall crond crond
Aproveito para dar mais algumas dicas:
- Agendamentos de de usuários comuns só podem executar os comandos que esse usuário tem permissão para executar. Assim, seria interessante testar o comando antes de agendá-lo.
- Alguns sistemas possuem um arquivo crontab global, localizado em “/etc/crontab”. Esse arquivo tem a mesma função dos agendamentos do root. Este arquivo só tem uma diferênça. O agendamento tem um campo adicional que informa o usuário para o qual o agendamento será executado. Veja abaixo:
Comando:
{min} {hor} {dia} {mes} {sem} {usuário} {comando}Onde {usuário} é o “username” do usuário com o qual o comando será executado.
- Caso você queira executar mais de um comando no mesmo agendamento, você pode criar um shell script e executá-los.
- Outra possibilidade é usar o comando run-parts. Este comando executa todos os comandos que estão dentro de um diretório. Assim, podemos executar todos os comandos e scripts que estão em um diretório específico, com um único agendamento. Por exemplo, o comando abaixo, executará todos os comandos que estão no diretório “/usr/local/bin/servidor”:
Comando:
run-parts /usr/local/bin/servidor
As possibilidades de agendamento no Linux são muito grandes, agora, cabe a você explorar essa poderosa ferramenta.
Qualquer dúvida, não deixe de acessar nosso Fórum CataBits!
Abraços e até a próxima…





Nenhum comentário
Seja o primeiro a comentar!
Escreva um comentário
- Todos os comentários serão rigidamente moderados;
- Identifique-se! Comentários de anônimos ou com e-mail falso serão removidos;
- Comentários com links serão removidos. Somente o link do comentarista será aceito;
- Comentários escritos em miguxês e/ou com predominância de maiúsculas serão removidos;
- Dúvidas técnicas e solução de problemas devem ser postados preferencialmente no Fórum;
- Por favor, prove que você é coerente, educado e bem informado: conheça o restante do site, saiba quem somos, sobre o que, para quem e como escrevemos antes de comentar futilidades;
- Respeite as opiniões dos autores e dos outros comentaristas. Seja breve e sem ofensas;
- Escreva comentários relevantes e que contribuam de alguma forma para o bem da humanidade;
- Não seja um inútil social. Lembre-se que o mundo não gira ao seu redor.
Atenção comentarista!