Agendamento de tarefas no Linux (cron e at)
Dica publicada em Linux / Introdução
Agendamento de tarefas no Linux (cron e at)
O agendamento de tarefas é um recurso muito interessante para a administração de sistemas operacionais. É possível programar a execução de scripts de manutenção do sistema, disparar envio de newsletters, gerar relatórios de analises de logs, entre outros. Podem ser determinados horários específicos para execução ou estabelecer intervalos regulares.
O cron é estruturado da seguinte forma:
Para listar o conteúdo de cada arquivo, digite:
crontab -l
Este comando exibirá o arquivo do usuário que o digitou. Para editar o arquivo, digite:
crontab -e
O crontab respeita esta sintaxe.
Existem ainda 4 diretórios que facilitam o agendamento de tarefas:
Diretório - Período:
O at permite o controle dos usuários que podem agendar comandos através dos arquivos /etc/at.allow e /etc/at.deny. Estes arquivos são organizados no formato de um usuário por linha. Durante o agendamento é verificado primeiro o arquivo at.allow (listando que pode executar o comando) e depois at.deny. Caso eles não existam, o agendamento de comando é permitido a todos os usuários.
Todas as tarefas agendadas são armazenadas em arquivos dentro do diretório /var/spool/cron/atjobs. Para ver as tarefas, digite:
# atq
Para remover uma tarefa, use comando "atrm" seguido do número da tarefa obtida pelo atq.
Cron
No GNU/Linux estes recursos são implementados pelo cron, que pode ser utilizado tanto pelo administrador como pelos outros usuários do sistema.- crontab -e Edita o crontab ou cria um caso ainda não exista;
- crontab -l Mostra o conteúdo do crontab;
- crontab -r Remove o crontab;
- crontab -v Mostra quando foi a última vez que o crontab foi editado (disponível em apenas alguns sistemas).
O cron é estruturado da seguinte forma:
Arquivo crontab
O crontab controla as tarefas agendadas por cada usuário. Existe um arquivo para o sistema (/etc/crontab) e um para cada usuário, localizado em /var/spool/cron/<usuário>.Para listar o conteúdo de cada arquivo, digite:
crontab -l
Este comando exibirá o arquivo do usuário que o digitou. Para editar o arquivo, digite:
crontab -e
O crontab respeita esta sintaxe.
- - - - - | | | | | | | | | +----- dia da semana (0 - 6) (domingo=0) | | | +------- mês (1 - 12) | | +--------- dia do mês (1 - 31) | +----------- hora (0 - 23) +------------- minuto (0 - 59)O usuário root pode acessar o crontab de outros usuários, basta informar o nome do usuário após as opções -r, -l ou -e.
Agendando tarefas
- 00 3,5,4 * * * root /usr/local/sbin/backup.sh - Diariamente, às 03:00h, 05:00h e 07:00h será executado, pelo usuário root, o script backup.sh;
- 40 16 1 6-8 * /home/oracle/sqldump.sh - Às 16:40 dos dias 01 de junho, julho e agosto, será executado o script sqldump.sh.
A especificação do usuário para executar o script é opcional.
- */5 * * * * php /var/www/cacti/poller.php > /dev/null 2>&1 - Executa, a cada 5 minutos, o arquivo poller.php com usuário php.
Existem ainda 4 diretórios que facilitam o agendamento de tarefas:
Diretório - Período:
- /etc/cron.hourly - De hora em hora;
- /etc/cron.daily - Diariamente;
- /etc/cron.weekly - Semanalmente;
- /etc/cron.monthly - Mensalmente.
AT
O comando "at" pode agendar tarefas de forma semelhante ao cron, e é integrado à interface de linha de comando do Linux. É muito eficiente se aplicado no agendamento de tarefas que sejam disparadas somente uma vez. Uma características deste programa é a execução de aplicativos que tenham passado de seu horário de execução. É muito útil se o computador é desligado com muita frequência ou quando ocorrer alguma interrupção, nesse caso falta de energia.O at permite o controle dos usuários que podem agendar comandos através dos arquivos /etc/at.allow e /etc/at.deny. Estes arquivos são organizados no formato de um usuário por linha. Durante o agendamento é verificado primeiro o arquivo at.allow (listando que pode executar o comando) e depois at.deny. Caso eles não existam, o agendamento de comando é permitido a todos os usuários.
Agendando tarefas com o at
- echo ls /var/log | at 10am today - Executa às 10 da manhã de hoje;
- echo updatedb | at 10:00pm today - Executa às 10 da noite de hoje;
- echo netstat | at 14:30 tomorrow - executa o comando netstat às 14:30 da tarde;
- at -f commands.txt teatime - Executa os comandos especificados no arquivos "commands.txt" no horário do chá da tarde (às 16:00 horas);
- at -f commands.txt +3 minutes - Executa comandos especificados no arquivo "commands.txt" daqui a 3 minutos.
Todas as tarefas agendadas são armazenadas em arquivos dentro do diretório /var/spool/cron/atjobs. Para ver as tarefas, digite:
# atq
Para remover uma tarefa, use comando "atrm" seguido do número da tarefa obtida pelo atq.
[]'s
Elder Marco.