Beefy Boxes and Bandwidth Generously Provided by pair Networks DiBona
Just another Perl shrine
 
PerlMonks  

Re^3: Close a file and reopen a new one at midnight

by Anonymous Monk
on Jan 14, 2013 at 20:40 UTC ( #1013274=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Close a file and reopen a new one at midnight
in thread Close a file and reopen a new one at midnight

Ok here is how I got it to work. I used a signal handler to close and reopen the file.

while (1) { $SIG{USR1} = sub { close $file; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localti +me(time); my $hrmin = sprintf ("%02d%02d",$hour,$min); my $ymd = sprintf("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$md +ay,$hour,$min,$sec); my $filename = "/tmp/$ymd.txt"; print $filename, "\n"; open $file, ">$filename" || die("Couldn't open $file"); }; while (my $line = <$sock>) { if ($line =~ m/^(ALARM: )/) {
Now I can just use the log rotate system to send a killall -USR1 to start a new file.


Comment on Re^3: Close a file and reopen a new one at midnight
Download Code
Re^4: Close a file and reopen a new one at midnight
by Anonymous Monk on Jan 14, 2013 at 21:17 UTC
    While this works for the file. I am not getting anything written to the file.
    #!/usr/bin/perl -w use strict; use IO::Socket; use MIME::Lite; use Time::Out qw(timeout); $SIG{PIPE} = "IGNORE"; $| = 1; my $nb_secs = 10; my $buf = ""; my $file; my $sock = new IO::Socket::INET (PeerAddr => '192.168.173.9', PeerPort => 4002, Proto => 'tcp', Type => SOCK_STREAM, ); die "cannot open socket" unless ($sock); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(t +ime); my $hrmin = sprintf ("%02d%02d",$hour,$min); my $ymd = sprintf("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$ +hour,$min,$sec); my $filename = "/var/flexshare/shares/logs/$ymd.txt"; print $filename, "\n"; open $file, ">$filename" || die("Couldn't open $file"); while (1) { $SIG{USR1} = sub { close $file; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localti +me(time); my $hrmin = sprintf ("%02d%02d",$hour,$min); my $ymd = sprintf("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$md +ay,$hour,$min,$sec); my $filename = "/var/flexshare/shares/logs/$ymd.txt"; print $filename, "\n"; open $file, ">$filename" || die("Couldn't open $file"); }; while (my $line = <$sock>) { #Print current line to open $file. print $file $line; if ($line =~ m/^(ALARM: )/) { timeout $nb_secs => sub { my $count = 0; until ($count == 5 ) #Read the next xx lines { $buf .= $sock->getline(); $sock->flush(); $count++; } }; if ($@){ my $msg = MIME::Lite->new( ..... $SIG{INT} = sub { die "\nKilling program.\n"; close $sock or die "close: $!"; }; } } sleep 10; # allow sometime to exit close $file;
    So what did I mess up?????

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1013274]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2014-04-18 04:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (461 votes), past polls