Build precise queries to find exactly what you need
Press ESC to close
@gruef
Favorites0
Views
Projects0
this fix will accept a $9 parameter for all_services or for all_hosts, so you need to run only one script from crontab #!/bin/bash # # Write a command to the Nagios command file to cause # it to schedule service downtime. # # Author: Sam Tilders [email protected] # Bugfix and adding syntax for 3.2.x nagios version # Frank Gruenwald [email protected] # # Based on the example event handler scripts and cmd.c/.cgi # # Requires: # GNU Date (for date formatting options) # Bash > 2.x (for inline variable regex substitution on the comment_data) # Notes: # 1) In order for Nagios to process any commands that # are written to the command file, you must enable # the check_external_commands option in the main # configuration file. # Caveats: # Using "date" to validate the command line date format doesn't always pick # up all mistakes in the date format. Sometimes "date" seems to invent something # that might have been what you intented. # Makes no attempt to verify the hostname or service desc before passing them to # the command pipe. Nagios seems to ignore the command if it doesn't match. # Write a command to the Nagios command file to cause # it to schedule host downtime # Example: # A cron entry to schedule downtime for the nntp service every day at 0400 while # other cron jobs (locate database update) slow the machine down. # 30 0 * * * schedule_svc_downtime news NNTP "`date --iso-8601` 04:00:00" "`date --iso-8601` 05:00:00" 1 3600 auto "while cron does things" # There are utilities such as "shellsupport" that will do date manipulation allowing shell scripts # to wrap around this command to schedule for days in advance instead of same date. usage() { echo "Usage: $0 or " echo " Times must be in the form "CCYY-MM-DD HH:mm:ss" and will probably need to be quoted." echo " fixed is either 1 or 0 and indicates that the time period is fixed and duration should be ignored" echo " length of the downtime in seconds, only used if not fixed downtime" echo " user who is requesting the downtime" echo " comment to place on the downtime, probably will need to be quoted." } if [ $# -lt 9 ]; then echo "$0: Too few parameters" usage exit 1 fi if [ $# -gt 9 ]; then echo "$0: Too many parameters" usage exit 1 fi hostname=$1 servicedesc=$2 raw_start=$3 raw_end=$4 fixed=$5 duration=$6 comment_author=$7 # command is comment with ; replaced for space comment_data=${8/;/ } echocmd="/bin/echo" CommandFile="/opt/nagios/var/rw/nagios.cmd" # get the current date/time in seconds since UNIX epoch datetimes=`date +%s` datetime="[$datetimes]" start_time=`date -d "$raw_start" +%s` if [ $? != 0 ]; then echo "Bad format for start time." usage exit 1 fi end_time=`date -d "$raw_end" +%s` if [ $? != 0 ]; then echo "Bad format for end time." usage exit 1 fi if [ $fixed != 1 -a $fixed != 0 ]; then echo "Fixed must be 1 or 0" usage exit 1 fi # create the command line to add to the command file #cmdline="$datetime SCHEDULE_SVC_DOWNTIME;$hostname;$servicedesc;$start_time;$end_time;$fixed;$duration;7200;$comment_author;$comment_data" case "$9" in all_services) cmdline="$datetime SCHEDULE_HOST_SVC_DOWNTIME;$hostname;$start_time;$end_time;$fixed;$duration;7200;$comment_author;$comment_data" ;; all_hosts) cmdline="$datetime SCHEDULE_HOST_DOWNTIME;$hostname;$start_time;$end_time;$fixed;$duration;7200;$comment_author;$comment_data" ;; esac # append the command to the end of the command file echo $cmdline >> $CommandFile
Reviewed 15 years ago