Sí, naturalmente que puedes realizar todas esas operaciones con Perl.
Ahora bien... desde hace años, en casi todas las distribuciones Linux, vienen equipadas con un software que se llama
logrotate, que realiza esas operaciones de forma muy cómoda.
Y, además, tiene en cuenta un problema que no has planteado en tu cuestión: los archivos de registro (
log)
son escritos por los programas servidores o
dæmons. Si tu, con tu programa, en un momento dado, modificas el archivo de registro que estos programas están actualizando, puedes llevarte la sorpresa de que, aunque los dejes vacíos, no empezarán a escribir en ellos desde cero, sino desde la última posición que conocían. Eso quiere decir que hay que informar a esos programas de que ha ocurrido un cambio en los
log y que deben, o bien crearlos desde cero, o bien comenzar a escribir en ellos desde el principio.
En este ejemplo verás que se le envía una señal HUP al samba para indicarle esa circunstancia.
Otro ejemplo, en mis servidores, tengo este archivo que define las políticas de logrotate para los registros de actividad del Apache:
Using text Syntax Highlighting
/var/log/apache2/*.log {
weekly
missingok
rotate 200
compress
delaycompress
notifempty
create 644 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
que quiere decir:
"Rota los archivos
/var/log/apache2/*.log -elimina el último archivo de registro comprimido, comprime el log .1, y renombra el actual .log a .log.1-, semanalmente, sin importar si faltan archivos intermedios, hasta un máximo de 200 registros históricos, con un archivo .1 intermedio, excepto si son archivos vacíos, y crea un nuevo log con permisos 644 con propietario root y grupo adm, y cuando hayas terminado con todos, mándale un comando reload al apache, para que comience a escribir en el nuevo registro".
Realizar toda esta operación puede llevarle mucho tiempo, pero no se perderá información, ya que el Apache seguirá escribiendo su actividad en los archivos log, que se estarán renombrando a log.1. Solo cuando le enviemos un reload, comenzará a escribir en los .log normales.
Pero en Perl, sí, sí que se puede, pero hay que hacer el programa, desde luego.
Quizás no quieras implementar toda la funcionalidad de logrotate en Perl, y con unas pocas opciones te sirva, pero ten en cuenta lo que te he dicho de notificar a los programas el cambio que acabas de hacer a sus correspondientes archivos log.