La risposta di Ignacio mi ha incuriosito, così ho fatto qualche ricerca e ho trovato la sceneggiatura del Perl di seguito. Se il tuo servizio scriverà su una pipe con nome, dovrebbe funzionare ed essere utilizzabile con logrotate.
Affinché funzioni, è necessario trasformare il file di registro in una pipe denominata. Rinomina quindi il file esistente
mkfifo /var/log/something.log
e per modificare i 3 nomi di file per soddisfare le tue esigenze. Esegui il tuo servizio quindi questo demone che dovrebbe leggere la named pipe e scriverlo in un nuovo file di log.
Se rinominate, /var/log/somethingrotateable.log
inviate un HUP al demone che si genererà e creerà un nuovo somethingrotateable.log
su cui scrivere. Se si utilizza logrotate uno postrotate
script dikill -HUP 'cat /var/run/yourpidfile.pid'
#!/usr/bin/perl -w
use POSIX ();
use FindBin ();
use File::Basename ();
use File::Spec::Functions;
#
$|=1;
#
# Change the 3 filenames and paths below to meet your requirements.
#
my $FiFoFile = '/var/log/something.log';
my $LogFile = '/var/log/somethingrotateable.log';
my $PidFile = '/var/run/yourpidfile.pid';
# # make the daemon cross-platform, so exec always calls the script
# # itself with the right path, no matter how the script was invoked.
my $script = File::Basename::basename($0);
my $SELF = catfile $FindBin::Bin, $script;
#
# # POSIX unmasks the sigprocmask properly
my $sigset = POSIX::SigSet->new();
my $action = POSIX::SigAction->new('sigHUP_handler',$sigset,&POSIX::SA_NODEFER);
POSIX::sigaction(&POSIX::SIGHUP, $action);
sub sigHUP_handler {
# print "Got SIGHUP";
exec($SELF, @ARGV) or die "Couldn't restart: $!\n";
}
#open the logfile to write to
open(LOGFILE, ">>$LogFile") or die "Can't open $LogFile";
open(PIDFILE, ">$PidFile") or die "Can't open PID File $PidFile";
print PIDFILE "$$\n";
close PIDFILE;
readLog();
sub readLog {
sysopen(FIFO, $FiFoFile,0) or die "Can't open $FiFoFile";
while ( my $LogLine = <FIFO>) {
print LOGFILE $LogLine;
}
}