Agendamento de tarefas
- Objetivo- Entender como funciona o agendamento no sistema;
- Aprender o funcionamento do cron;
- Aprender o funcionamento do at;
A crontab é utilizada para agendar comandos para serem executados periodicamente, ao contrário do comando at, que executa comandos pontualmente. Há dois tipos de crontab a de usuário e a do sistema. Ambas são arquivos que contêm tabelas com informação de quando o comando especificado deve ser executado, sendo que cada linha corresponde a um único agendamento.
A crontab é gerenciada pelo daemon crond, que a cada um minuto verifica se já algum agendamento que deve ser executado e executa-o. E fica armazenada em arquivos com o nome do usuário dono da tabela no diretório /var/spool/crond. Já a crontab do sistema é encontrada no /etc/crontab e já possui agendamentos para realizar as tarefas que se encontram nos diretórios /etc/cron.[hourly|daily|weekly|monthly]. Sendo que o programa chamado run-parts é quem executa os referidos agendamentos.
O formato das crontabs dos usuários e do sistema são quase iguais, além disso cada campo possui um conjunto de valores válidos, sendo eles:
- minuto varia de 0-59;
- hora varia de 0-23;
- dia varia de 1-31;
- mes varia de 1-12;
- diaDaSemana varia de 0-7,sendo 0 e 7 são o domingo;
- usuário um usuário válido no sistema;
- comando o path completo para o comando;
- vígula ',' especifica uma lista de valores, por exemplo: "1,3,4,7,8";
- - especifica um intervalo de valores, por exemplo: 1-15 (de 1 a 15);
- * especifica todos os valores possíveis;
- / espefica "pulos" de valores, por exemplo: se no campo hora utilizarmos "*/3" o comando será executado as "0,3,9,12,15,18,21";
Prática dirigida
1- Verifique se a data e a hora do sistema estão corretas:
# date
Após essa verificação podemos começar a realizar agendamentos.
2 - Agenda para 10 minutos no futuro a listagem do diretório /etc redirecionando para um arquivo, e depois outro arquivo contendo a data e a hora em que foi executada:
#at HH:mm MM/DD/YYYY
at > ls --color /etc > /root/etc_lists.txt
at > echo $(date +"%H:%m %M/%d/%Y" )>> /root/gera.txt
at > (ctrl+d)
3 - Agenda esta tarefa, confirme o agendamento listando todos os agendamentos pendentes:
# atq
4 - Vamos explorar o diretório onde ficam os agendamentos?
# cd /var/spool/cron/atjobs
# ls -la
5 - Mostre o conteúdo dos arquivos contidos nesse diretório:
# cat (agendamento)
repare que no agendamento, temos nossa variáveis, e o comando.
6 - Vamos realizar outro agendamento, para executar em 15 minutos, para que possamos aprender como apagá-los:
# at HH:mm MM/DD/YYYY
at > echo "Teste" > /tmp/at.out
at > ^d
7 - Liste os agendamentos correntes e verifique que um novo arquivo foi criado no diretório de spool do at.
8 - Remova o último agendamento:
# atrm
9 - Liste os agendamentos ativos e liste o contéudo do diretório de spool do at e veja que o job foi removido, utilize seus conhecimentos.
Agendando tarefas com o cron
1 - Crie um script para fazer o backup do /etc:
# vim /root/backup.sh
#!/bin/bash
#backup do /etc
tar czf /backup/$(date +%Y%m%d-%H%M) -etc.tar.gz /etc
obs: não esqueça das permissões do script:
# chmod +x backup.sh
2 - Entre na crontab do usuário para editá-la:
# crontab -e
3 - Coloque na crontab do usuário um agendamento para fazer o backup do diretório /etc utilizando o scrip criado a cada 2 minutos.
# MM HH DD mm DS CMD
*/2 * * * /root/backup.sh
4- Visualize os agendamentos feitos pelo o usuário.
# crontab -l
5 - Onde ficam armazenas os agendamentos feitos pelos usuário com o contrab -e?
# cd /var/spool/cron/crontabs
# ls
obs: Atenção! Não apague ou edite o seu agendamento dentro desse diretório, use os comandos para fazer isso.
6 - Após verificar que os agendamentos foram efetuados corretamente, apague todos os agendamentos do usuário.
# crontab -r
obs: Para apagar somente um agendamento do usuário, use o crontab -e e retire a linha desejada. Agora que aprendemos a utilizar a crontab do usuário podemos usar a crontab do sistema que opera praticamente da mesma forma, apenas tem um campo a mais, o usuário que executará o script.
7 - Faça o mesmo agendamento para execução do scrip backup.sh, mas agora na crontab do sistema:
# MM HH DD mm DS USER CMD
*/2 * * * root /root/backup.sh
obs: repare que dentro do arquivo /etc/crontab existem quatro agendamentos já definidos: cron.hourly,cron.daily,cron.weekly e cron.monthly.
8 - Para fazer com que o scrip backup.sh seja executado diariamento:
# cp /root/backup.sh /etc/cron.daily/backups
9 - Para fazer com que o scrip backup.sh seja executado semanalmente.
# cp /root/backup.sh /etc/cron.weekly/backups
10 - Depois de adicionar o script dentro dos diretórios será necessário reiniciar o daemon do cron.
# /etc/init.d/cron stop
# /etc/init.d/cron start
# date
Após essa verificação podemos começar a realizar agendamentos.
2 - Agenda para 10 minutos no futuro a listagem do diretório /etc redirecionando para um arquivo, e depois outro arquivo contendo a data e a hora em que foi executada:
#at HH:mm MM/DD/YYYY
at > ls --color /etc > /root/etc_lists.txt
at > echo $(date +"%H:%m %M/%d/%Y" )>> /root/gera.txt
at > (ctrl+d)
3 - Agenda esta tarefa, confirme o agendamento listando todos os agendamentos pendentes:
# atq
4 - Vamos explorar o diretório onde ficam os agendamentos?
# cd /var/spool/cron/atjobs
# ls -la
5 - Mostre o conteúdo dos arquivos contidos nesse diretório:
# cat (agendamento)
repare que no agendamento, temos nossa variáveis, e o comando.
6 - Vamos realizar outro agendamento, para executar em 15 minutos, para que possamos aprender como apagá-los:
# at HH:mm MM/DD/YYYY
at > echo "Teste" > /tmp/at.out
at > ^d
7 - Liste os agendamentos correntes e verifique que um novo arquivo foi criado no diretório de spool do at.
8 - Remova o último agendamento:
# atrm
9 - Liste os agendamentos ativos e liste o contéudo do diretório de spool do at e veja que o job foi removido, utilize seus conhecimentos.
Agendando tarefas com o cron
1 - Crie um script para fazer o backup do /etc:
# vim /root/backup.sh
#!/bin/bash
#backup do /etc
tar czf /backup/$(date +%Y%m%d-%H%M) -etc.tar.gz /etc
obs: não esqueça das permissões do script:
# chmod +x backup.sh
2 - Entre na crontab do usuário para editá-la:
# crontab -e
3 - Coloque na crontab do usuário um agendamento para fazer o backup do diretório /etc utilizando o scrip criado a cada 2 minutos.
# MM HH DD mm DS CMD
*/2 * * * /root/backup.sh
4- Visualize os agendamentos feitos pelo o usuário.
# crontab -l
5 - Onde ficam armazenas os agendamentos feitos pelos usuário com o contrab -e?
# cd /var/spool/cron/crontabs
# ls
obs: Atenção! Não apague ou edite o seu agendamento dentro desse diretório, use os comandos para fazer isso.
6 - Após verificar que os agendamentos foram efetuados corretamente, apague todos os agendamentos do usuário.
# crontab -r
obs: Para apagar somente um agendamento do usuário, use o crontab -e e retire a linha desejada. Agora que aprendemos a utilizar a crontab do usuário podemos usar a crontab do sistema que opera praticamente da mesma forma, apenas tem um campo a mais, o usuário que executará o script.
7 - Faça o mesmo agendamento para execução do scrip backup.sh, mas agora na crontab do sistema:
# MM HH DD mm DS USER CMD
*/2 * * * root /root/backup.sh
obs: repare que dentro do arquivo /etc/crontab existem quatro agendamentos já definidos: cron.hourly,cron.daily,cron.weekly e cron.monthly.
8 - Para fazer com que o scrip backup.sh seja executado diariamento:
# cp /root/backup.sh /etc/cron.daily/backups
9 - Para fazer com que o scrip backup.sh seja executado semanalmente.
# cp /root/backup.sh /etc/cron.weekly/backups
10 - Depois de adicionar o script dentro dos diretórios será necessário reiniciar o daemon do cron.
# /etc/init.d/cron stop
# /etc/init.d/cron start
Exercicios teóricos
1- Qual a diferença entre os agendadores de tarefas at e cron?
2 - Quantos campos há na crontab do sistema? E na crontab do usuário?
3 - Qual é a sintaxe correta para agendar uma tarefa que seja executada nos dias 1,7,10 e dos dias 15 ao 20 às 19hs utilizando a crontab do usuário, sendo o nome do comando "foo"?
Dicas LPI: A única diferença entre as duas crontabs é que na do sistema há um campo para especificar qual é o usuário que irá executar o comando agendado.
2 - Quantos campos há na crontab do sistema? E na crontab do usuário?
3 - Qual é a sintaxe correta para agendar uma tarefa que seja executada nos dias 1,7,10 e dos dias 15 ao 20 às 19hs utilizando a crontab do usuário, sendo o nome do comando "foo"?
Dicas LPI: A única diferença entre as duas crontabs é que na do sistema há um campo para especificar qual é o usuário que irá executar o comando agendado.
0 comentários:
Postar um comentário