Normalmente maillog escrito por syslogd
, não por sendmail
, por isso você deve enviar SIGHUP para syslogd
Eu quero girar meu maillog, mas quero ter certeza de que o registro recém-girado contém as últimas 2 milhões de linhas do registro anterior:
# write the last 2M lines to a new log
tail -n 2000000 /var/log/maillog > /var/log/maillog.new
# move the existing log to datestamped backup
datestamp='date "+%Y%m%d"'
mv /var/log/maillog /var/log/maillog.$datestamp
# move the new log to normal log
mv /var/log/maillog.new /var/log/maillog
# tell sendmail to reload
killall -HUP sendmail
Tudo isso funciona, exceto pelo fato de que o sendmail continua a gravar no arquivo de log de backup "maillog.yyyymmdd" em vez do "maillog" correto!
Qual é a maneira correta de fazer isso sem ter que parar primeiro o sendmail, girar e começar de novo?
Você pode criar seu próprio arquivo de log
[admin@local ~]# killall sendmail
[admin@local ~]# touch /var/log/sendmail.log
[admin@local ~]# sendmail -bd -q15m >> /var/log/sendmail.log
e
[admin@local ~]# tail -f /var/log/sendmail.log
451 4.0.0 /fake/path/sendmail.cf: line 0: cannot open: No such file or directory
Nos velhos dias você simplesmente (tudo isso como root) parava o sendmail (/etc/init.d/sendmail stop ou service sendmail stop), então você moveria o / var / log / maillog para / var / log / maillog.1 e então você criaria um novo maillog com "touch / var / log / maillog" então reinicie o sendmail (/etc/init.d/sendmail start ou service sendmail start). Isso é praticamente universal em todos os sabores e distribuições * NIX que remontam ao início dos anos 90.
Mas hoje você está reiniciando o sendmail, ele ainda está tentando gravar em seu arquivo de log antigo, mesmo depois de movê-lo e não será gravado no novo arquivo, independentemente do local para o qual você configurou o usuário ou as permissões. E se você cometer o erro de deletar o arquivo maillog que estiver usando, não poderá ver nada que esteja registrando. Então o que você faz?
O Linux foi pioneiro em uma maneira mais nova de fazer as coisas, às vezes por segurança e, às vezes, por automação. Então, eles aprimoraram o processo de registro do sistema e algumas coisas não funcionam da mesma maneira, mas fecham.
Em um Linux moderno (por volta de 2012 ou mais recente, talvez seja necessário fazer assim):
1) pare o sendmail
/etc/init.d/sendmail stop
ou
service sendmail stop
2) mova o arquivo de log para um local de backup e crie um novo
rm /var/log/maillog.2.gz
mv /var/log/maillog.1 /var/log/maillog.2
mv /var/log/maillog /var/log/maillog.1
touch /var/log/maillog
3) Defina as permissões de propriedade no arquivo / var / log / maillog
chown root:root /var/log/maillog
chmod 600 /var/log/maillog
4) então DIGA SYSLOGD PARA RECARREGAR CONFIGURAÇÃO , e esta é a parte que irá salvá-lo se você for um velho * NIX hack. Se você não fizer isso, o sendmail não irá gravar no novo arquivo / var / log / maillog que você criar, NÃO IMPORTA O QUE VOCÊ FAÇA.
pkill -HUP rsyslog
5) Agora é hora de reiniciar o sendmail:
/etc/init.d/sendmail start
ou
service sendmail start
E se você seguir o arquivo / var / log / maillog, você verá a saída se o e-mail estiver fluindo.
Espero que isso salve alguém em algum momento.
Obrigado David