Build precise queries to find exactly what you need
Press ESC to close
Your review has been submitted and is pending approval.
this bash script check if processes matching to a pattern are exceeding a given elapsed time.
Current Version
1.2
Last Release Date
2012-04-24
Owner
Godin
License
GPL
Compatible With
check_proc_age.sh plugin
This Nagios plugin check if processes matching to a pattern are exceeding a given elapsed time
Usage : check_proc_age.sh -p <process_name> -w <seconds> -c <seconds> -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.
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.
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";;
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)
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: ".
Thanks for the advices, my script has been updated.
You must be logged in to submit a review.
To:
From:
We’ve completely redesigned the world’s largest repository of Nagios plugins and monitoring tools. Join thousands of users sharing monitoring solutions for servers, applications, and everything in between.
Due to our redesign, all existing accounts require a password reset to access your account again.
Ready to explore 6,100+ projects and contribute to the community?
Reset Password Create Account
Happy Monitoring!