Automação de tarefas e Logging |
A administração de um sistema vai além de instalar programas e cadastrar ou remover usuários. Devemos ter meios para criar relatórios sobre o andamento das atividades do sistema, o que está funcionando, quanto tempo foi gasto com determinadas tarefas, quais usuários que rodaram determinadas aplicações (ainda mais quando estas aplicações ão taxadas por hora, como é o caso de ISPs, ou seja, provedores de acesso à internet). Felizmente o sistema possui vários meios para usarmos com esta finalidade.
O primeiro, sempre presente, mas configurável é o kernel
ring buffer, que coleciona mensagens emitidas pelo sistema, geralmente
relativas à instalação e retirada de módulos. O
comando dmesg permite-nos listar (usado sozinho), limpar o buffer (com a
opção -c
), ou configurar o nível de detalhes
que queremos (com -n <nível>
, sendo os níveis
maiores com mais detalhes). Com este programa poderemos ver quais as
interfaces que o kernel reconheceu, pro exemplo.
O segundo, através do daemon syslogd
, além
de ler as mensagens enviadas pelo kernel (dispositivo
/dev/klogd
), também lê de outros dispositivos
especiais relacionados com sockets do unix (/dev/log
), ou das
redes (especificados em /etc/services
). Isso permite o uso destas
facilidades por quaisquer outras aplicações. De fato, o comando
logger
pode ser usado para criar mensagens de logging a partir de
scripts com o shell ou outras liguagens. Estas mensagens ficam armazenadas no
arquivo /var/log/messages
.
O terceiro é o sistema baseado nos arquivos utmp
e
wtmp
, localizados no diretório /var/log
. O
utmp
armazena dados somente da última sessão,
enquanto que wtmp
, continua crescendo. Todos os logins
e logouts são registrados com data, hora e terminal. Isso
permite o seu uso em um sistema de accounting primitivo. Os programas
responsáveis por sua atualização são o
login
e o init
. Estes arquivos são
únicos no Linux, devido ao seu formato, em binário. Não
remove o arquivo wtmp. Se ele crescer muito, efetue uma cópia de
/dev/null
[30] para ele, assim: cp
/dev/null /var/log/wtmp
e seu tamanho será reduzido a zero
novamente. Para verificar os últimos 15 logins, execute
last -15
. (last
é um comando relacionado com
este mecanismo)
monitorando /var/log/messages
Screenshot ("fotografia") da tela com
|
syslogd
o mensageiro
fiel
Muitas informações, avisos, alertas e outros tipos de mensagens
vêm do kernel e daemons do sistema. O syslogd
(mais um daemon), é usado para filtrar e classificar estas
mesnagens, controlado por um arquivo de configuração:
/etc/syslog.conf
.
Este daemon é inicializado na carga do sistema, em algum dos scripts
rc.??? que já discutimos. Como opções -f
pode ser usado para inidcar o arquivo de configuração (caso
não seja o default), -p
para indicar o socket substituto
de /dev/log
, e -m
para especificar o intervalo entre
mensagens de marcação (para mostrar que está vivo!), cujo
default é de 20 minutos. Estas mensagens aparecem com o texto "--
MARK --"
, mesmo que não haja atividade no sistema.
O arquivo de configuração do syslogd é organizado
como linhas contendo um
camposeletor e um campo
deação, separados
por tabs ou espaços. O campo seletor, por sua vez, é formado por duas parte, separadas por um ponto: facilidade e prioridade.
O campo
ação indica para
onde queremos enviar a mensagem escolhida pelo campo seletor. Pode ser um nome
de arquivo (exemplo:
Na prioridade, podemos adicionalmente usar o símbolo "=" para indicar mensagens somente com esta prioridade determinada, e o símbolo "!" para tirar mensagens com esta prioridade ou maior. Múltiplos seletores podem ser concatenados com ";". A palavra none numa prioridade exclui todas as prioridades. Vejamos alguns exemplos:
|
Conquanto as facilidades do syslogd são úteis
para informações gerais sobre o sistema, são
insuficientes quando queremos saber exatamente os programas que os
usuários estão executando. Podemos verificar o que um
usuário está fazendo on-line através de um
programa chamado ttysnoop
, que é um client/server
onde instalamos o servidor no lugar do login normal dos usuários e
podemos ecoar (e até interferir) tudo que o usuário está
fazendo em um outro terminal, que fica assim sincronizado com o do
usuário. Entretanto, esta facilidade é boa somente para
"espionar" um usuário suspeito, e não para criar
relatórios sobre a utilização de programas, ou para fazer
estatísticas de acesso às aplicações. Para esse
fim existe um pacote de accounting (no Metalab, diretório
Linux/system/admin) com os comandos accton, lastcomm, accttrim,
dumpacct
, baseado em uma série semelhante usada no BSD
(unix-like desenvolvido pela U. Berkeley).
O programa |
Com um argumento, o sistema de accounting será ligado, e cada
processo será monitorado: usuário que rodou o processo,
alguns flags, o nome do comando usado
para iniciar o processo, o número de
pagefaults (acessos a memórias que forçaram
o uso doswapper), o tempo de
CPU gasto com o processo, o instante que o processo terminou.
O comando O administrador poderá escrever alguns scripts com o shell (ou Perl!) para processar este arquivo, extraindo os dados relevantes em forma de relatório. |
|
Eis um exemplo (truncado, pois geralmente é muito grande) da tabela no
arquivo /var/log/acct
:
Command Flags User Tty PagFlt Time Endtime mail - rildo tty5 127 0.00 secs Tue Jan 12 14:49:20 fortune - rildo tty5 118 0.02 secs Tue Jan 12 14:49:15 biff - rildo tty5 75 0.04 secs Tue Jan 12 14:49:13 bash F rildo tty5 25 0.01 secs Tue Jan 12 14:49:12 dircolors - rildo tty5 84 0.03 secs Tue Jan 12 14:49:12 bash F rildo tty5 37 0.00 secs Tue Jan 12 14:49:12 cat - rildo tty5 101 0.02 secs Tue Jan 12 14:49:12 sh - root __ 181 0.02 secs Tue Jan 12 14:48:49 bash SX root __ 197 0.04 secs Tue Jan 12 14:48:44 gimp S root ttyp0 482 0.22 secs Tue Jan 12 14:48:44 |
Muitas tarefas como "obter os jornais na internet, diariamente", "checar
e-mail a cada 30 minutos", "elaborar relatóros com horas de acesso dos
usuários", e outras, devem ser realizadas com datas e horários
pré-estabelecidos. Seria muito tedioso deixar um operador executar
manualmente cada uma delas, além de sujeito a falhas. Para automatizar
tarefas que sejam realizadas em datas e horas determinadas, ou a cada
segunda-feira por exemplo, ou mesmo no dia 31 de dezembro de cada ano, o
utilitário cron
é o especialista!
Além das tarefas do administrador, estas mesmas facilidades
estão disponíveis para cada usuário "mortal" do sistema,
bastando para isso ele editar a sua própia crontab, ou
usar um dos muitos utilitários mais user-friendly para fazer
isso.
O que há numa crontab? Como na mioria dos arquivos de
configuração do Linux, somente texto! Vejamos o seu formato:
minutos horas dia-do-mes mes dia-da-semana comando |
Como usual, espaços separam os campos. O campo comando
,
adicionalmente, pode ter quantos espaços forem necessários (por
isso ele fica no final). Cada um dos outros campos assume valores
numéricos com faixas determinadas pela tabela:
minutos | 0-59 |
Um asterisco "*" pode ser usado para indicar qualquer valor (widcard)
permitido para esse campo.
Um campo pode ter vários valores, separados por vírgulas para
admitir cada um dos valores para a variável. (exemplo: se colocarmos
Podemos também usar nomes abreviados dos meses e dos dias das semana (em ingles) nos campos correspondentes. |
horas | 0-23 (onde 0 é meia-noite) | |
dia-do-mes | 1-31 | |
mes | 1-12 | |
dia-da-semana | 0-6 (onde 0 é o domingo) |
Os campos de uma crontab são combinados como vários filtros em
cascata, somente sendo executado o comando quando todos os valores se
verificam, e quando isto é verdade, a execucão se processa uma
só vez, sendo necessário um novo acontecimento para se obter
nova execução. Isto evita a possibilidade de um comando "muito
rápido" ser executado inúmeras vezes porque os seus campos
combinam com o momento atual. Outra peculiaridade do crond é a saida
padrão, que normalmente está redirigida a uma
geração de mensagem (e-mail) para o usuário. Prar
modificar este comportamento, podemos redirigir a saida padrão para
outro local, por exemplo, adicionando a um arquivo com >>
arquivo.
Um exemplo sofisticado de entradas na */20 8-18 * * Mon-Sat cat /var/log/messages|gzip >msg-`date +%y%m%d-%H:%M`.gz Este exemplo mostra um comando relativamente sofisticado, onde queremos salvar o arquivo de mensagens do sistema, compactado a cada 20 minutos, portanto no minuto 0, 20 ou 40 de cada hora, na horário comercial (8-18), de segunda (Mon) a sábado (Sat), todos os meses do ano. Simplesmente usamos o cat para "imprimir o arquivo" em stdout, passamos por um pipe para o gzip, que joga a saida comprimida em um outro arquivo cujo nome deve ser variável (para não ser reescrito, a não ser que quisessemos adicionar o resultado no final com >>). Para definir o nome do arquivo, usamos uma propriedade do shell (substituição de comandos) já vista, e o comando date para nos devolver a data no formato desejado. Um arquivo típico para hoje seria:
data (e hora) normal de hoje:
data com o formato acima: 990112-19:57 o que daria o nome do arquivo
Para melhorar esta ferramenta, poderíamos "limpar" o arquivo
|