Search Exchange
Search All Sites
Nagios Live Webinars
Let our experts show you how Nagios can help your organization.Login
Directory Tree
check_proc_age.sh
1.2
2012-04-24
- Nagios 1.x
- Nagios 2.x
- Nagios 3.x
- Nagios XI
- Nagios Fusion
GPL
87827
File | Description |
---|---|
check_proc_age.sh | check_proc_age.sh plugin |
Meet The New Nagios Core Services Platform
Built on over 25 years of monitoring experience, the Nagios Core Services Platform provides insightful monitoring dashboards, time-saving monitoring wizards, and unmatched ease of use. Use it for free indefinitely.
Monitoring Made Magically Better
- Nagios Core on Overdrive
- Powerful Monitoring Dashboards
- Time-Saving Configuration Wizards
- Open Source Powered Monitoring On Steroids
- And So Much More!
This Nagios plugin check if processes matching to a pattern are exceeding a given elapsed time
Usage : check_proc_age.sh -p -w -c
-p parameter : name of the monitoring process
-c parameter : minimal elapsed time for status CRITICAL on NAGIOS
-w parameter : minimal elapsed time for status WARNING on NAGIOS
the plugin return now performance data : number of process; oldest time in minutes; warning time in minutes; critical time in minutes; 0;
this is a improvement of "check_proc_time.sh" plugin.
The output text of my plugin is more clear about processes state and "check_proc_time.sh" calculate a bad elapsed time in certain case on my system.
Usage : check_proc_age.sh -p
-p parameter : name of the monitoring process
-c parameter : minimal elapsed time for status CRITICAL on NAGIOS
-w parameter : minimal elapsed time for status WARNING on NAGIOS
the plugin return now performance data : number of process; oldest time in minutes; warning time in minutes; critical time in minutes; 0;
this is a improvement of "check_proc_time.sh" plugin.
The output text of my plugin is more clear about processes state and "check_proc_time.sh" calculate a bad elapsed time in certain case on my system.
Reviews (4)
bybanditbbs, December 5, 2017
The if (td[2]) in the ageproc line needs updated. It needs to be if ("td[2]") to test if empty or not. Necause if the time happens to be 123-00:40:23 the if would be false when it actually contains 00.
byLaFong, May 16, 2017
This plugin does not find processes in the format 'interpreter /path/to/script', i.e. 'perl /usr/local/sbin/myscript.pl'. I also wanted to be able to just specify, in this case, 'myscript.pl'. My changes to add those:
@@ -70,12 +70,12 @@
fi
#calculate number of process
-nbproc=$(ps -A -o comm | grep -w $proc | grep -v $0 | wc -l)
+nbproc=$(ps -A -o args | grep -w "$proc" | grep -v $0 | grep -v grep | wc -l)
if [ $nbproc -gt 0 ]
then
#calculate age of oldest process
- ageproc=$(ps -A -o etime,comm,args | grep $proc | grep -v $0 | gawk '{split($1,t,":");split(t[1],td,"-");if (td[2]) {ta=td[1]*86400; t[1]=td[2]} else {ta=0}; if (t[3]) {$1=(t[1]*60+t[2])*60+t[3]+ta} else {$1=t[1]*60+t[2]};if (NR==1) {maxi=$1;} else {if ($1>maxi){maxi=$1;}}};END {print maxi}')
+ ageproc=$(ps -A -o etime,comm,args | grep "$proc" | grep -v $0 | grep -v grep | gawk '{split($1,t,":");split(t[1],td,"-");if (td[2]) {ta=td[1]*86400; t[1]=td[2]} else {ta=0}; if (t[3]) {$1=(t[1]*60+t[2])*60+t[3]+ta} else {$1=t[1]*60+t[2]};if (NR==1) {maxi=$1;} else {if ($1>maxi){maxi=$1;}}};END {print maxi}')
case $ageproc in
?|[0-5]? ) maxage=$ageproc" Seconds";;
@@ -70,12 +70,12 @@
fi
#calculate number of process
-nbproc=$(ps -A -o comm | grep -w $proc | grep -v $0 | wc -l)
+nbproc=$(ps -A -o args | grep -w "$proc" | grep -v $0 | grep -v grep | wc -l)
if [ $nbproc -gt 0 ]
then
#calculate age of oldest process
- ageproc=$(ps -A -o etime,comm,args | grep $proc | grep -v $0 | gawk '{split($1,t,":");split(t[1],td,"-");if (td[2]) {ta=td[1]*86400; t[1]=td[2]} else {ta=0}; if (t[3]) {$1=(t[1]*60+t[2])*60+t[3]+ta} else {$1=t[1]*60+t[2]};if (NR==1) {maxi=$1;} else {if ($1>maxi){maxi=$1;}}};END {print maxi}')
+ ageproc=$(ps -A -o etime,comm,args | grep "$proc" | grep -v $0 | grep -v grep | gawk '{split($1,t,":");split(t[1],td,"-");if (td[2]) {ta=td[1]*86400; t[1]=td[2]} else {ta=0}; if (t[3]) {$1=(t[1]*60+t[2])*60+t[3]+ta} else {$1=t[1]*60+t[2]};if (NR==1) {maxi=$1;} else {if ($1>maxi){maxi=$1;}}};END {print maxi}')
case $ageproc in
?|[0-5]? ) maxage=$ageproc" Seconds";;
byneozaga, January 23, 2017
Hi,
Made this improvment
line 73:
nbproc=$(ps -A -o cmd | grep -w $proc | grep -v grep | grep -v $0 | wc -l)
so that you can search the full command line and not to find itself. (I know grep -v grep is ugly)
Made this improvment
line 73:
nbproc=$(ps -A -o cmd | grep -w $proc | grep -v grep | grep -v $0 | wc -l)
so that you can search the full command line and not to find itself. (I know grep -v grep is ugly)
1) Line 86 has a bug
Original:
elif [$ageproc -gt $warning ]
Corrected:
elif [ $ageproc -gt $warning ]
2) Minor improvements I made
a) nbproc
The "comm,args" options should be changed to "comm" only, otherwise the calculated number of processes is always increased by 1.
nbproc=$(ps -A -o comm | grep -w $proc | grep -v $0 | wc -l)
b) Output
The output should always begin with w.g. "CRITICAL: ", "WARNING: " or "OK: ".
Original:
elif [$ageproc -gt $warning ]
Corrected:
elif [ $ageproc -gt $warning ]
2) Minor improvements I made
a) nbproc
The "comm,args" options should be changed to "comm" only, otherwise the calculated number of processes is always increased by 1.
nbproc=$(ps -A -o comm | grep -w $proc | grep -v $0 | wc -l)
b) Output
The output should always begin with w.g. "CRITICAL: ", "WARNING: " or "OK: ".
Owner's reply
Thanks for the advices, my script has been updated.