如何从命令行到卷曲为特定时间设置任何特定nagios主机的停机时间?

uni*_*kar 5 curl nagios http-post

我需要通过curl为命令行设置特定nagios主机的计划停机时间.我是这样做的吗?

这是我已经用于从命令行启用/禁用服务/主机通知的内容.

curl -d "some input here" url "user:pass" 
Run Code Online (Sandbox Code Playgroud)

就像我需要为计划停机时间做的那样.现在的问题是停机时间选项需要更多选项,即启动时间,结束时间,评论等.

那么如何通过命令行中的curl完成它呢?

curl -d " some key value pair(hostname,servicename" url "username:passowrd"
Run Code Online (Sandbox Code Playgroud)

这将从命令行打开和关闭服务/主机通知.所以我想以这种方式使用curl来为特定的nagios服务器提供停机时间.

上面的脚本不起作用,因为nagios的停机时间选项需要更多的参数,我试图在脚本中注入这些参数.但它没有那样做.我们也需要提供starttime,endtime和comment值.

另外,我已经尝试了curl的选项--form和--form-string with the script ...无法通过.

理想的想法是,不是去Nagios web界面,我们想从命令行完成这件事(我们已经成功完成了服务/主机服务和通知).

希望我现在绝对清楚.

TIA

巴斯卡尔

Sar*_*tha 6

我增强了Anders的答案,提供了一个完整的脚本,并且不需要使用支持--data-urlencode的更新的curl.这也会自动计算发送的结束时间,并检查请求是否已成功提交给Nagios.此外,这还会调度主机和主机上所有服务的停机时间.

#!/bin/bash

function die {
  echo $1;
  exit 1;
}

echo Scheduling downtime on nagios

HOST=monitoredhost
NAGURL=https://nagios.example.com/cgi-bin/nagios3/cmd.cgi
USER=nagiosuser
PASS=nagiospassword
MINUTES=10

export MINUTES

# The following is urlencoded already
STARTDATE=`date "+%Y-%m-%d+%H%%3A%M%%3A%S"`
# This gives us the date/time X minutes from now
ENDDATE=`date "+%Y-%m-%d+%H%%3A%M%%3A%S" -d "$MINUTES min"`
curl --silent --show-error \
    --data cmd_typ=86 \
    --data cmd_mod=2 \
    --data host=$HOST \
    --data "com_data=Updating+application" \
    --data trigger=0 \
    --data "start_time=$STARTDATE" \
    --data "end_time=$ENDDATE" \
    --data fixed=1 \
    --data hours=2 \
    --data minutes=0 \
    --data btnSubmit=Commit \
    --insecure \
    $NAGURL -u "$USER:$PASS" | grep -q "Your command request was successfully submitted to Nagios for processing." || die "Failed to contact nagios";

echo Scheduled downtime on nagios
Run Code Online (Sandbox Code Playgroud)


And*_*ahl 3

curl只需添加更多--data(-d)参数即可发送多个表单字段值。这应该安排 Nagios 系统上的服务停机时间:

curl \
    --data cmd_typ=56 \
    --data cmd_mod=2 \
    --data host=$HOSTNAME \
    --data-urlencode "service=${SERVICENAME}" \
    --data-urlencode "com_data=${COMMENT}" \
    --data trigger=0 \
    --data-urlencode "start_time=2011-07-31 00:00:00" \
    --data-urlencode "end_time=2011-07-31 01:00:00" \
    --data fixed=1 \
    --data hours=2 \
    --data minutes=0 \
    --data btnSubmit=Commit \
    $NAGIOS-URL "username:password"
Run Code Online (Sandbox Code Playgroud)