Ignacio এর উত্তর আমাকে আগ্রহী তাই আমি কিছু গবেষণা করে নীচে পার্ল স্ক্রিপ্ট নিয়ে এসেছি। যদি আপনার পরিষেবা কোনও নামযুক্ত পাইপে লিখবে তবে এটি কাজ করা উচিত এবং লোগ্রোটেটের সাথে ব্যবহারযোগ্য।
এটি কাজ করার জন্য আপনাকে নিজের লগফিলটিকে একটি নামযুক্ত পাইপ তৈরি করতে হবে। বিদ্যমান ফাইলটির পুনরায় নামকরণ করুন
mkfifo /var/log/something.log
এবং আপনার প্রয়োজনীয়তা পূরণের জন্য 3 ফাইলের নাম সম্পাদনা করতে। আপনার পরিষেবাটি চালান তারপরে এই ডেমোন যা নামক পাইপটি পড়তে হবে এবং এটি একটি নতুন লগফাইলে লিখতে হবে।
আপনি যদি নাম পরিবর্তন করেন /var/log/somethingrotateable.log
তবে ডেমনকে এইচওপি প্রেরণ করুন এটি নিজেই উত্থিত হবে এবং somethingrotateable.log
লিখতে একটি নতুন তৈরি করবে । লোগ্রোটেট ব্যবহার করে যদি একটি postrotate
স্ক্রিপ্টkill -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;
}
}