terça-feira, 9 de outubro de 2012

Fedora sem rsyslog e cronie

A partir do systemd 38 ele traz uma implementação syslog nativa, o journal. O Fedora (F17 ou superior), contudo, manteve o rsyslog na instalação padrão, passando a ter dois sistemas de log ao mesmo tempo (o systemd encaminha as mensagens para o rsyslog). Apesar de não ter todos os recursos corporativos do rsyslog, o journal pode ser o suficiente para desktops ou até mesmo servidores. Decidi testar removendo o rsyslog:

# yum remove rsyslog

Se o Yum estiver configurado para automaticamente remover dependências órfãs, irão junto cronie, cronie-anacron e crontabs.

Na verdade os demais pacotes serem removidos é um bug, pois o pacote RPM do systemd no Fedora 17 não tem um "Provides: syslog", mesmo tendo uma implementação syslog embutida. No F18, ao remover o rsyslog, o YUM não mais considerará que o cronie e turma ficaram órfãos.

Considerarei que você tenha removido o cronie (um fork do cron mantido pela Red Hat) e companhia. Sem ele, as tarefas agendadas não funcionarão mais. Aqui, a única tarefa que preciso é a do logrotate, pois do contrário os logs do Samba e do Squid entupiriam o sistema de arquivos.

O systemd tem os arquivos .timer, que nos permitem executar um .service em um determinado intervalo de tempo. Não possui um ajuste tão fino como o cronie, mas é o suficiente.

/etc/systemd/system/logrotate.timer

[Unit]
Description=Roda logrotate.service a cada 24h

[Timer]
OnBootSec=10min
OnUnitActiveSec=24h

[Install]
WantedBy=multi-user.target

/etc/systemd/system/logrotate.service

[Unit]
Description=Rotaciona logs

[Service]
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf

Para ativá-lo:

# systemctl daemon-reload
# systemctl enable logrotate.timer
# systemctl start logrotate.timer

Dez minutos depois de iniciado, o systemd executará logrotate.service (mesmo nome do arquivo .timer). A partir do momento que o serviço for executado, contará 24h e o executará novamente. E assim indefinidamente enquanto o sistema estiver ligado.

OnBootSec usa o uptime, mais lógico como referência desde quando o sistema foi iniciado. 10min por garantia (e bota garantia...) para que tudo esteja devidamente carregado. Seria útil ter a opção OnTransactionFinishedSec proposta por Christian Seiler, assim poderíamos usar como referência o momento quando o target no qual o arquivo .timer está instalado fosse completado. No caso o multi-user.target.

Para fazer o systemd armazenar o journal no disco:

# mkdir -p /var/log/journal

Pronto, Fedora sem rsyslog e cronie (dois serviços a menos) e com o logrotate sendo executado diariamente. Os arquivos /var/log/{messages,secure,maillog,spooler} poderão ser excluídos, pois o systemd não escreve neles. O journal é um arquivo binário que é manipulado pelo comando journalctl.

Mais informações:
http://0pointer.de/public/systemd-man/systemd.timer.html
http://0pointer.de/public/systemd-man/journalctl.html

Nenhum comentário:

Postar um comentário