Package: nfdump
Version: 1.6.8p1-1
Severity: serious
Tags: patch
--- Please enter the report below this line. ---
Hello,
I configured nfcapd to run expiration and external command on every new
file it creates (options -x and -e)
however, this operation runs only once (first time) and all consequent file
rotations do not execute external command and expiration process:
Jan 22 12:39:38 zabbix nfcapd[31437]: Init v9: Max number of v9 tags: 75
Jan 22 12:39:38 zabbix nfcapd[31437]: Init IPFIX: Max number of IPFIX tags:
62
Jan 22 12:39:38 zabbix nfcapd[31437]: Process_v5: New exporter: SysID: 1,
engine id 0, type 0, IP: 138.34.6.221, Sampling Mode: 0, Sampling Interval:
1
Jan 22 12:40:38 zabbix nfcapd[31437]: Ident: 'none' Flows: 2622, Packets:
12782, Bytes: 2807144, Sequence Errors: 3, Bad Packets: 0
Jan 22 12:40:38 zabbix nfcapd[31437]: Signal launcher
Jan 22 12:40:38 zabbix nfcapd[31437]: Total ignored packets: 0
Jan 22 12:40:38 zabbix nfcapd[31438]: Launcher: Wakeup
Jan 22 12:40:38 zabbix nfcapd[31438]: Launcher: ident: none run command:
'/root/perl_prog/nf2pg/nf2pg.pl /var/cache/nfdump/nfcapd.201401221239'
Jan 22 12:40:38 zabbix nfcapd[31438]: Launcher: fork child.
Jan 22 12:40:38 zabbix nfcapd[31438]: Launcher: child exec done.
Jan 22 12:40:39 zabbix nfcapd[31438]: Run expire on '/var/cache/nfdump'
Jan 22 12:40:39 zabbix nfcapd[31438]: Limits: Filesize <none>, Lifetime
604800 = 1.0 weeks, Watermark: 95%
Jan 22 12:40:39 zabbix nfcapd[31438]: Current size: 241070080 = 229.9 MB,
Current lifetime: 67178 = 18.7 hours, Number of files: 230
Jan 22 12:40:39 zabbix nfcapd[31438]: expire completed - nothing to expire.
Jan 22 12:40:39 zabbix nfcapd[31438]: Launcher: Sleeping
Jan 22 12:40:41 zabbix nfcapd[31438]: Launcher: Wakeup
Jan 22 12:40:41 zabbix nfcapd[31438]: Launcher: Sleeping
Jan 22 12:41:38 zabbix nfcapd[31437]: Ident: 'none' Flows: 2203, Packets:
22807, Bytes: 2994566, Sequence Errors: 0, Bad Packets: 0
Jan 22 12:41:38 zabbix nfcapd[31437]: Signal launcher
Jan 22 12:41:38 zabbix nfcapd[31437]: Total ignored packets: 0
Jan 22 12:41:38 zabbix nfcapd[31438]: Launcher: Wakeup
Jan 22 12:41:38 zabbix nfcapd[31438]: Launcher: Sleeping
Jan 22 12:42:38 zabbix nfcapd[31437]: Ident: 'none' Flows: 2513, Packets:
11841, Bytes: 3113153, Sequence Errors: 3, Bad Packets: 0
Jan 22 12:42:38 zabbix nfcapd[31437]: Signal launcher
Jan 22 12:42:38 zabbix nfcapd[31437]: Total ignored packets: 0
Jan 22 12:42:38 zabbix nfcapd[31438]: Launcher: Wakeup
Jan 22 12:42:38 zabbix nfcapd[31438]: Launcher: Sleeping
I found that the following changes in bin/launcher.c fix that behaviour:
_patch_BEGIN_
diff -Naur nfdump-1.6.8p1/bin/launch.c modified/bin/launch.c
--- nfdump-1.6.8p1/bin/launch.c 2012-03-09 10:49:39.000000000 -0500
+++ modified/bin/launch.c 2014-01-22 17:59:28.789367209 -0500
@@ -95,17 +95,21 @@
case SIGTERM:
// in case the process will not terminate, we
// kill the process directly after the 2nd TERM
signal
+ syslog(LOG_DEBUG, "Launcher: SIGTERM");
if ( done > 1 )
exit(234);
done++;
- break;
+ return;
case SIGHUP:
+ syslog(LOG_DEBUG, "Launcher: SIGHUP");
launch = 1;
- break;
+ return;
case SIGCHLD:
+ syslog(LOG_DEBUG, "Launcher: SIGCHILD");
child_exit++;
- break;
+ return;
}
+return;
} /* End of IntHandler */
@@ -370,6 +374,15 @@
while ( !done ) {
// sleep until we get signaled
syslog(LOG_DEBUG, "Launcher: Sleeping");
+ //this helps to run signal handler everytime, don't know
why :(
+ act.sa_handler = SignalHandler;
+ sigemptyset(&act.sa_mask);
+ act.sa_flags = 0;
+ sigaction(SIGCHLD, &act, NULL); // child process terminated
+ sigaction(SIGTERM, &act, NULL); // we are done
+ sigaction(SIGINT, &act, NULL); // we are done
+ sigaction(SIGHUP, &act, NULL); // run command
+ //_END_ of this helps to run signal handler everytime,
don't know why :(
select(0, NULL, NULL, NULL, NULL);
syslog(LOG_DEBUG, "Launcher: Wakeup");
if ( launch ) { // SIGHUP
_patch_END_
after this patch applied nfcapd log looks like:
Jan 23 07:41:25 zabbix nfcapd[26470]: Ident: 'none' Flows: 11597, Packets:
138316, Bytes: 15393459, Sequence Errors: 3, Bad Packets: 0
Jan 23 07:41:25 zabbix nfcapd[26470]: Signal launcher
Jan 23 07:41:25 zabbix nfcapd[26470]: Total ignored packets: 0
Jan 23 07:41:25 zabbix nfcapd[26471]: Launcher: SIGHUP
Jan 23 07:41:25 zabbix nfcapd[26471]: Launcher: Wakeup
Jan 23 07:41:25 zabbix nfcapd[26471]: Launcher: ident: none run command:
'/root/perl_prog/nf2pg/nf2pg.pl /var/cache/nfdump/nfcapd.201401230736'
Jan 23 07:41:25 zabbix nfcapd[26471]: Launcher: fork child.
Jan 23 07:41:25 zabbix nfcapd[26471]: Launcher: child exec done.
Jan 23 07:41:26 zabbix nfcapd[26471]: Run expire on '/var/cache/nfdump'
Jan 23 07:41:26 zabbix nfcapd[26471]: Limits: Filesize <none>, Lifetime
604800 = 1.0 weeks, Watermark: 95%
Jan 23 07:41:26 zabbix nfcapd[26471]: Current size: 432570368 = 412.5 MB,
Current lifetime: 135385 = 1.6 days, Number of files: 454
Jan 23 07:41:26 zabbix nfcapd[26471]: expire completed - nothing to expire.
Jan 23 07:41:26 zabbix nfcapd[26471]: Launcher: Sleeping
Jan 23 07:41:34 zabbix nfcapd[26471]: Launcher: SIGCHILD
Jan 23 07:41:34 zabbix nfcapd[26471]: Launcher: Wakeup
Jan 23 07:41:34 zabbix nfcapd[26471]: laucher child exit 1 childs.
Jan 23 07:41:34 zabbix nfcapd[26471]: launcher child 24631 exit status: 0
Jan 23 07:41:34 zabbix nfcapd[26471]: laucher waiting childs done. 0 childs
Jan 23 07:41:34 zabbix nfcapd[26471]: Launcher: Sleeping
Jan 23 07:46:25 zabbix nfcapd[26470]: Ident: 'none' Flows: 13237, Packets:
101872, Bytes: 28040647, Sequence Errors: 3, Bad Packets: 0
Jan 23 07:46:25 zabbix nfcapd[26470]: Signal launcher
Jan 23 07:46:25 zabbix nfcapd[26470]: Total ignored packets: 0
Jan 23 07:46:25 zabbix nfcapd[26471]: Launcher: SIGHUP
Jan 23 07:46:25 zabbix nfcapd[26471]: Launcher: Wakeup
Jan 23 07:46:25 zabbix nfcapd[26471]: Launcher: ident: none run command:
'/root/perl_prog/nf2pg/nf2pg.pl /var/cache/nfdump/nfcapd.201401230741'
Jan 23 07:46:25 zabbix nfcapd[26471]: Launcher: fork child.
Jan 23 07:46:25 zabbix nfcapd[26471]: Launcher: child exec done.
Jan 23 07:46:26 zabbix nfcapd[26471]: Run expire on '/var/cache/nfdump'
Jan 23 07:46:26 zabbix nfcapd[26471]: Limits: Filesize <none>, Lifetime
604800 = 1.0 weeks, Watermark: 95%
Jan 23 07:46:26 zabbix nfcapd[26471]: Current size: 433582080 = 413.5 MB,
Current lifetime: 135685 = 1.6 days, Number of files: 455
Jan 23 07:46:26 zabbix nfcapd[26471]: expire completed - nothing to expire.
Jan 23 07:46:26 zabbix nfcapd[26471]: Launcher: Sleeping
I found that without this change SIGHUP handler is called only for the
first time, it could be silly change, since I'm not a C developer at all,
but it does its job.
First block of changes and syslog() calls is mostly for debugging, which
signal is sent to a process. it can be ignored, same as 'break's vs
'return's.
Thanks
Tim
--- System information. ---
Architecture: amd64
Kernel: Linux 3.11-2-amd64
Debian Release: jessie/sid
800 unstable http.us.debian.org
800 unstable deb-multimedia.org
500 stable dl.google.com
1 experimental http.us.debian.org
--- Package information. ---
Depends (Version) | Installed
=========================- -=============
libc6 (>= 2.4) |
librrd4 (>= 1.3.0) |
zlib1g (>= 1:1.1.4) |
lsb-base (>= 3.0-6) |
Package's Recommends field is empty.
Package's Suggests field is empty.