diff --git a/systemd-journal-gelf b/systemd-journal-gelf index b8539eb..67db6c5 100644 --- a/systemd-journal-gelf +++ b/systemd-journal-gelf @@ -15,7 +15,10 @@ use Net::Domain qw(hostfqdn); my $conf = {}; my $cmd = { - config => '/etc/systemd/journal-gelf.yml' + config => '/etc/systemd/journal-gelf.yml', + compress => 1, + state => '/var/lib/systemd-journal-gelf/state', + keep_alive => 1 }; my $cursor = undef; my $last_save = 0; @@ -23,6 +26,10 @@ my $cursor_re = qr{^s=[a-z\d]+;i=[a-z\d]+;b=[a-z\d]+;m=[a-z\d]+;t=[a-z\d]+;x=[a- #### End global vars +END { + print "Saving current cursor to " . $conf->{state} . "\n"; + save_cursor(); +} #### Routines ##### @@ -36,6 +43,7 @@ Usage: $0 --url= [--compress|--no-compress] [--user=production --password=s * --username and --password may be used if URL is protected with a basic auth mecanism. Either both or none must be provided * --state can be used to specify where to record the last correctly sent message, so we can start from here when systemd-journal-gelf is restarted or if there's a network problem. Default value is /var/lib/systemd-journal-gelf/state + * --no-keep-alive turns off Keep Alive, which might be needed for some remote server not handling it correctly _EOF } @@ -48,20 +56,16 @@ sub save_cursor { } } -sub handle_stop { - print "Saving current cursor to " . $conf->{state} . "\n"; - save_cursor(); -} - #### End Routines #### GetOptions ( - 'c|config=s' => \$cmd->{config}, - 'state=s' => \$cmd->{state}, - 'compress!' => \$cmd->{compress}, - 'url=s' => \$cmd->{url}, - 'username=s' => \$cmd->{username}, - 'password=s' => \$cmd->{password} + 'c|config=s' => \$cmd->{config}, + 'state=s' => \$cmd->{state}, + 'compress!' => \$cmd->{compress}, + 'url=s' => \$cmd->{url}, + 'username=s' => \$cmd->{username}, + 'password=s' => \$cmd->{password}, + 'keep-alive!' => \$cmd->{keep_alive} ); # Open config file @@ -86,10 +90,6 @@ foreach ( keys %{ $cmd } ){ $conf->{$_} = $cmd->{$_} if ( $cmd->{$_} ); } -# Set some defaults is missing -$conf->{state} //= '/var/lib/systemd-journal-gelf/state'; -$conf->{compress} //= 1; - # Now check config makes sens if ( not $conf->{url} or @@ -102,13 +102,9 @@ if ( print "Starting the Systemd Journal GELF uploader daemon\n"; -# Catch SIGTERM and save the cursor ! -$SIG{TERM} = 'handle_stop'; -$SIG{INT} = 'handle_stop'; - my $ua = LWP::UserAgent->new( env_proxy => 1, - keep_alive => 1 + keep_alive => $conf->{keep_alive} ); $ua->default_header( 'Content-Type' => 'application/json' );