En mi configuración, tengo rsyslog que está a cargo de seguir los cambios de /home/user/my_app/shared/log/unicorn.stderr.loguso imfile. El contenido se envía a otro servidor de registro remoto mediante TCP.
Cuando el archivo de registro gira, rsyslog deja de enviar datos al servidor remoto.
Intenté volver a cargar rsyslog, enviar una señal HUP y reiniciarlo por completo, pero nada funcionó.
Las únicas formas en que pude encontrar que realmente funcionaban eran sucias:
- detenga el servicio, elimine los archivos de estadísticas de rsyslog e inicie rsyslog nuevamente. Todo eso en un gancho postrotate en mi archivo logrotate.
kill -9rsyslog y comenzar de nuevo.
¿Hay alguna manera adecuada de hacer esto sin tocar las partes internas de rsyslog?
Archivo Rsyslog
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ template WithoutTimeFormat, "[entorno] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile stat-unicorn-stderr $ InputFileSeverity info $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Reenviar al servidor remoto si $ syslogtag contiene 'apache-' entonces @@ my_server: 5000; SinTiempoFormato : syslogtag, contiene, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
Logrotate file
/home/user/my_app/shared/log/*.log {
diario
missingok
dateext
girar 30
comprimir
notifempty
extensión gz
copytruncate
crear 640 usuario usuario
guiones compartidos
post-rotar
(detener rsyslog && rm / var / spool / rsyslog / stat- * && iniciar rsyslog 2> & 1) || cierto
escritura final
}
Para su información, el archivo es legible para el usuario rsyslog, mi servidor es accesible y otros archivos de registro que no rotan en el mismo ciclo continúan siendo rastreados correctamente.
Estoy ejecutando Ubuntu 12.04.

post-rotate(lo cual no es una cosa) en lugar de esopostrotate, porque ese script original de logrotate que tenía debería haber funcionado bien con rsyslog (si el script postrotate se hubiera estado ejecutando ) ...?post-rotateporlastaction. Su comentario aún es muy sensato y puede haber resuelto mi problema en ese momento :). Sin embargo, para el registro, evitaré usarlocopytruncateen el futuro de todos modos porque es lento y juega con controladores de archivos.Su archivo logrotate contiene una entrada para
/home/user/shared/log/*.log, que no coincide con su archivo de registro/home/user/my_app/shared/log/unicorn.stderr.log.copytruncateDebe agregar una entrada logrotate para ese directorio y asegurarse de que contenga ; tal como está, rsyslog está cambiando el nombre del archivo actual y creando uno nuevo, y el archivo sigue el manejo del archivo ahora renombrado.fuente