Tarefas automatizadas
O serviço atd
O daemon(serviço) atd é um serviço do Linux / Unix localizado no diretório /etc/init.d/, e tem a função de executar um lista de tarefas em um determinado horário, e possue os seguintes diretórios:
/var/spool/cron/atjobs - armazena a lista de tarefas
/var/spool/cron/atspool - armazena a saída de execução da lista de tarefas.
/var/spool/at
/var/spool/at/spool/
/var/spool/at
/var/spool/at/spool/
/var/spool/at/spool/
at
- executa tarefas com horário agendadoAs permissões para executar o comando at são feitas pelos arquivos /etc/at.allow e /etc/at.deny.
Caso exista o arquivo /etc/at.allow, o superusuário root deverá ser especificado e então o comando at só poderá ser executado pelos usuários especificados no arquivo e se /etc/at.allow estiver vazio todos os usuários poderão executar o comando at.
Caso o arquivo /etc/at.allow não exista, então será verificado a existência do arquivo /etc/at.deny, que contém os usuários que não poderão executar o comando at. Mas se caso nenhum deles existir, somente o usuário root poderá executar o comando at.
-V
Exibe a versão do comando-l
Exibe a fila de trabalhos do at (mesmo que atq)-m
Avisa por email sobre o comando executado-f script
Executa comandos de um script-d
Remove a fila de trabalhos do at (mesmo que atrm)hora
Especifica o horário no formato: h(horas):m(minutos), hh:mm ou hhmm, pode ser usadonoon, midnight e nowmês
Especifica a data no formato em inglês: (jan(janeiro), feb(fevereiro),
mar(março), apr(abril), may(maio), jun(junho),jul(julho), ago(agosto), sep(setembro), oct(outubro), nov(novembro) edec(dezembro), pode-se usar também today e tomorrow. Exemplos:
$ at 21:25 apr
warning: commands will be executed using /bin/sh at> touch /tmp/arquivo APERTE ENTER
at> <EOT>APERTE CTRL + D
job 1 at Tue apr 8 21:25:00 2008
$ at -l (exibe a tarefa)
1 Thu Apr 10 21:25:00 2008 a aluno1
$ at -d 1 (apaga a tarefa com o número 1)
atq - exibe a fila de tarefas agendadas do comando at
Exemplos:$ atq
1 Thu Apr 10 21:25:00 2008 a aluno1
atrm (fila de trabalho) Exemplos:
$ atrm 1 (remove a fila com o número 1)
batch - executa comandos quando o nível de carga do sistema permitir
Em outras palavras, quando a carga média do sistema estiver abaixo de 1.5 (verificando a saída de top no campo load average), ou um valor especificado pela invocação do atd.
Exemplos: $ cd /home/aluno1 $ cat > comandos touch /tmp/teste1 echo 1 > /tmp/teste1 APERTE ENTER APERTE CTRL + D $ chmod +x comandos $ batch
warning: commands will be executed using /bin/sh at> /home/aluno1/comandosAPERTE ENTER
at> <EOT>APERTE CTRL + D
job 15 at Tue Jan 8 22:57:00 2008
Após algum tempo execute o comando top, e quando o sistema permitir será criado o arquivo teste1 em /tmp.
$ top $ ls /tmp teste1
Debian e Ubuntu # /etc/init.d/atd start
Red Hat , Fedora, Mandriva e OpenSuse # /sbin/service atd start
Slackware # /usr/sbin/atrun
O serviço crond
O daemon(serviço) cron é um serviço do sistema localizado no diretório /etc/init.d/, e tem a função de executar tarefas automáticas com comandos e programas em datas e horários programados e possue o seguinte arquivo e diretório de configuração.
/etc/crontab - é onde são armazenados os comandos ou programas a serem executados •
/var/spool/cron/ - armazena os arquivos de crontab dos usuários. •
A sintaxe do arquivo /etc/crontab possui o seguinte formato:
(minutos) (horas) (dias do mês) (mês) (dias da semana) (usuário) (comando)
O preenchimento de cada campo é feito da seguinte maneira:
Campo Valores permitidos
Minutos: Números de 0 a 59 Horas: Números de 0 a 23 Dias do mês: Números de 1 a 31
Mês: Números de 1 a 12
Dias da semana: Números de 0 a 7 - de domingo (0) a sábado (7) Usuário: Pode ser root ou um usuário do sistema
Comando: Comando ou script a ser executado
Obs: Um asterisco (*) indica que pode ser usado qualquer valor indicado em qualquer campo. Por exemplo, se for usado no campo "dias da semana", o script será executado em todos os dias da semana de domingo (0) a sábado (7) 0 a 7.
Abaixo segue um exemplo do arquivo /etc/crontab, adicionando uma nova linha no arquivo /etc/crontab, não é necessário executar o comando crontab para criar uma nova crontab.
#/etc/crontab SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Essas entradas em /etc/crontab, diz ao daemon /etc/init.d/cron executar o programa run-parts e /usr/sbin/anacron em datas e horários programados. Esses programas executa scripts, comandos e programas especificados nos diretórios a abaixo:
Diretório Descrição
/etc/cron.hourly Será executado toda hora /etc/cron.dail Será executado todo dia
/etc/cron.weekly Será executado uma vez por semana /etc/cron.monthly Será executado uma vez por mês
55 23 * 1-12 1-5 root /root/script
Essa linha de contab executa o script /root/script como superusuário root, de segunda a sexta (1-5), entre o mês de janeiro a dezembro (1-12), todos os dias do mês, às 23:55.
crontab
O comando crontab é utilizado para gerenciar criando, editando e removendo arquivos de contab para usuários individualmente localizados em /var/spool/cron automaticamente em data e horários programados.
As permissões para executar o comando crontab são feitas pelos arquivos /etc/cron.allow e /etc/cron.deny.
comando crontab só poderá ser executado pelos usuários especificados no arquivo e se /etc/cron.allow estiver vazio todos os usuários poderão executar o comando crontab.
Caso o arquivo /etc/cron.allow não exista, então será verificado a existência do arquivo /etc/cron.deny, que contém os usuários que não poderão executar o comando crontab. Mas se caso nenhum deles existir, somente o usuário root poderá executar o comando crontab.
crontab (opções) arquivo
Opção Significado
-u (usuário) Especifica o nome de usuário que será usado pelo arquivo contab -l Mostra o arquivo de crontab do usuário corrente
-r Remove o arquivo de crontab do usuário corrente -e Edita o arquivo de crontab do usuário corrente
arquivo Especifica o arquivo de crontab a ser usado no mesmo formato do arquivo /etc/crontab Exemplos: Criando um script $ cd /home/aluno1 $ cat > script #!/bin/bash
echo "criando um script" touch /tmp/arquivo $ chmod +x script
Criando uma crontab
Ao usar a opção -e do comando crontab, será aberto o editor padrão do sistema, podendo ser os editores vi ou nano para editar e salvar o arquivo.
$ crontab -e
# m h dom mon dow command
15 8 1-31 1-12 0-7 aluno1 /home/aluno1/script
$ cd /home/aluno1 $ cat > arquivo_crontab 15 8 1-31 1-12 0-7 aluno1 /home/aluno1/script APERTE ENTER APERTE CTRL + D $ crontab arquivo_crontab $ crontab -l 15 8 1-31 1-12 0-7 aluno1 /home/aluno1/script $ crontab -r
logrotate
Logrotate é programa utilizado para gerenciar o crescimento do tamanho dos arquivos de log do sistema, rotacionando(onde são criados novos arquivos de logs), compactando diminuindo o tamanho do arquivo de log, removendo e enviando por email os arquivos de log.
O p r o g r a m a l o g r o t a t e é e x e c u t a d o t o d o s o s d i a s p e l o d a e m o n c r o n d a t r a v é s d o arquivo /etc/cron.daily/logrotate , e possue os seguintes arquivos e diretórios:
/etc/logrotate.conf - arquivo de configuração global. •
/etc/logrotate.d- diretório onde são armazenados os scripts de logrotate de arquivos de log individuais de cada programa.
•
/etc/cron.daily/logrotate - arquivo de configuração para o daemon crond executar diariamente o scripts de logrotate
•
Exemplo do arquivo /etc/logrotate.conf # /etc/logrotate.conf
# rotaciona os arquivos de log uma vez por semana weekly
# rotaciona os arquivos de log 3 vezes rotate 3
# cria novos arquivos de log vazios após rotacionar os logs antigos create
# descomente essa linha se você quer comprimir seus arquivos de log #compress
# diretório dos scripts de logrotate include /etc/logrotate.d
# os arquivos /var/log/wtmp e /var/log/btmp não serão rotacionados aqui /var/log/wtmp {
missingok monthly
create 0664 root utmp rotate 1
}
/var/log/btmp { missingok monthly
create 0664 root utmp rotate 1
}
# aqui você pode especificar outras configurações de log globais
A rotação é feita de acordo com o tamanho dos logs, sendo usado um contador no final do nome de arquivo de log e caso o contador tenha um 0 ou a palavra old(versão antiga), o arquivo será removido antes de rotacionar. Esse processo de rotacionamento é útil quando um arquivo de log atingir tamanhos acima de 20 MB.
Abaixo segue um exemplo de rotacionamento e compactação de logs no diretório do daemon syslog em /var/log. O funcionamento do rotacionamento funciona da seguinte forma:
Na primeira vez o arquivo syslog é rotacionado e renomeado parasyslog.1.gz e será criado um novo arquivo syslog vazio.
1.
Na segunda vez o arquivo syslog é rotacionado o arquivo syslog.1.gz é renomeado para syslog.2.gz e o arquivo syslog é renomeado para syslog.1.gz e será criado um novo arquivo syslog vazio.
2.
Na terceira vez o arquivo syslog é rotacionado o arquivo syslog.2.gz é renomeado parasyslog.3.gz, o arquivo syslog.1.gz é renomeado para syslog.2.gz, o arquivo syslog é renomeado para syslog.1.gz e será criado um novo arquivo syslog vazio.
3.
Na última vez o arquivo syslog.3.gz é apagado, e o arquivo syslog.2.gz é renomeado parasyslog.3.gz, o arquivo syslog.1.gz é renomeado para syslog.2.gz, o arquivo syslog é renomeado para syslog.1.gz e será criado um novo arquivo syslog vazio.
# ls -lh /var/log/
-rw-r--- 1 root adm 29K 2008-01-09 11:17 syslog -rw-r--- 1 root adm 181K 2008-01-09 06:39 syslog.0 -rw-r--- 1 root adm 29K 2008-01-08 07:19syslog.1.gz
-rw-r--- 1 root adm 18K 2008-01-07 06:56syslog.2.gz
-rw-r--- 1 root adm 16K 2008-01-06 06:55syslog.3.gz
Você poderá usar o comando logrotate com a opção -f para "forçar" a rotação de logs e a opção -d informa mais detalhes os processos do logrotate.
# logrotate -d -f /etc/logrotate.conf
# logrotate -d -f /etc/logrotate.d/apache2
# ls /var/log
# ls /var/log/apache2
-rw-r--- 1 root adm 0 2008-01-09 12:24 access.log -rw-r--- 1 root adm 159K 2008-01-08 21:12 access.log.1 -rw-r--- 1 root adm 3,6K 2008-01-04 13:55access.log.2.gz
-rw-r--- 1 root adm 117 2008-01-09 12:24 error.log -rw-r--- 1 root adm 761 2008-01-09 12:24error.log.1.gz
-rw-r--- 1 root adm 831 2008-01-06 06:56error.log.2.gz
Logrotate pode ser configurado globalmente no arquivo /etc/logrotate.conf, ou especificando individualmente em um arquivo em /etc/logrotate.d/ como mostra o exemplo abaixo retirado do comando man logrotate, onde rotaciona os arquivos logs /var/log/syslog 3 vezes, semanalmente e envia um sinal através do comando /usr/bin/killall -HUP syslogd, suspendendo o processo do daemon syslogd:
Exemplo de configuração de arquivo logrotate individual: # /etc/logrotate.d/syslog
/var/log/syslog { rotate 3 weekly postrotate
/usr/bin/killall -HUP syslogd endscript
}
Inicialização do daemon crond
Debian e Ubuntu # /etc/init.d/cron start
Red Hat , Fedora, Mandriva e OpenSuse # /sbin/service crond start
Slackware # /usr/sbin/crond