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.
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.
Anderson, uma pequena correção.
Se os arquivos at.deny e at.allow não existirem, apenas o root podera usá-lo, e não como mencionado, em que todos os usuários poderiam.
Para que todos possam, o at.deny deve existir, mas estar vazio.
No mais parabéns pela dica.
Um abraço.
Adriano