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

如何设置任何特定nagios主机从命令行到curl的特定时间内的停机时间?,curl,http-post,nagios,Curl,Http Post,Nagios,我需要通过curl从命令行设置特定nagios主机的计划停机时间。我该怎么做 下面是我已经在使用的命令行服务/主机通知启用/禁用功能 curl -d "some input here" url "user:pass" 就像我需要安排停机时间一样。现在的问题是,停机时间选项需要更多的选项,如开始时间、结束时间、评论等 那么我如何通过命令行中的curl来完成它呢 curl -d " some key value pair(hostname,servicename" url "username:p

我需要通过curl从命令行设置特定nagios主机的计划停机时间。我该怎么做

下面是我已经在使用的命令行服务/主机通知启用/禁用功能

curl -d "some input here" url "user:pass" 
就像我需要安排停机时间一样。现在的问题是,停机时间选项需要更多的选项,如开始时间、结束时间、评论等

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

curl -d " some key value pair(hostname,servicename" url "username:passowrd"
它将从命令行打开和关闭服务/主机通知。所以我希望以这种方式使用curl来为特定的nagios服务器提供停机时间

上面的脚本不适用于它,因为nagios的宕机选项使用了更多参数,我试图在脚本中注入这些参数。但结果不是这样。我们还需要提供开始时间、结束时间和注释值

另外,我用这个脚本尝试了curl的选项--form和--form字符串..无法通过

besic的想法不是使用Nagios web界面,而是希望通过命令行完成这项工作(我们已经成功实现了服务/主机服务和通知)

希望我现在完全清楚了

短暂性脑缺血发作


Bhaskar

只需添加更多的
--data(-d)
参数,就可以使用
curl
发送多个表单字段值。这将安排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"

我增强了Anders answer,以提供一个完整的脚本,并且不需要使用支持数据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

为了在我的Nagios上工作,我必须在“data host=$host”下添加一行

--数据“com_author=自动+停机”\


没有这些,我的Nagios就不会接受停机时间。

我进一步增强了Sarels的回答

  • 使其与Nagios 3.5.1兼容(更改了cmd_类型,添加了childoptions,更改了日期格式)
  • 使
    主机
    用户
    成为命令行参数
  • 使用$USER(当前用户)作为默认值
  • 添加密码提示(无硬编码密码)
  • 在nagios消息中添加了作者
我的版本:

#!/bin/bash

# Bash script to schedule downtime for Host
# source: http://stackoverflow.com/a/9198181
# Author: Sarel Botha http://stackoverflow.com/users/35264/

function die {
  echo $1;
  exit 1;
}

if [ $# -lt 1 ]; then
  echo "$0 <host> [<user>]"
  exit 0;
elif [ $# -ge 2 ]; then
  USER=$2
fi

HOST=$1
NAGURL=https://nagios.example.com/nagios3/cgi-bin/cmd.cgi
MINUTES=30

echo Scheduling downtime on nagios for $HOST

export MINUTES

# read password
read -s  -p "Password for $USER:" PASS
echo ""  # newline after prompt

# The following is urlencoded already
STARTDATE=`date "+%d-%m-%Y+%H%%3A%M%%3A%S"`
# This gives us the date/time X minutes from now
ENDDATE=`date "+%d-%m-%Y+%H%%3A%M%%3A%S" -d "$MINUTES min"`
curl --silent --show-error \
    --data cmd_typ=55 \
    --data cmd_mod=2 \
    --data host=$HOST \
    --data "com_author=$USER" \
    --data "com_data=reboot+due+to+security+updates" \
    --data trigger=0 \
    --data "start_time=$STARTDATE" \
    --data "end_time=$ENDDATE" \
    --data fixed=1 \
    --data hours=2 \
    --data minutes=0 \
    --data childoptions=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
#/bin/bash
#用于计划主机停机时间的Bash脚本
#资料来源:http://stackoverflow.com/a/9198181
#作者:Sarel Bothahttp://stackoverflow.com/users/35264/
功能模具{
回声1美元;
出口1;
}
如果[$#-lt 1];然后
回显“$0[]”
出口0;
elif[$#-ge 2];然后
用户=$2
fi
主机=$1
纳古尔=https://nagios.example.com/nagios3/cgi-bin/cmd.cgi
分钟=30
echo为$HOST在nagios上安排停机时间
导出分钟数
#读取密码
读取-s-p“$USER的密码:”PASS
提示后回显“”换行符
#以下内容已经过URL编码
STARTDATE=`date“+%d-%m-%Y+%H%%3A%m%%3A%S”`
#这为我们提供了从现在起X分钟后的日期/时间
ENDDATE=`date“+%d-%m-%Y+%H%%3A%m%%3A%S”-d“$MINUTES”`
curl--静默--显示错误\
--数据cmd_typ=55\
--数据cmd_mod=2\
--数据主机=$host\
--数据“com_author=$USER”\
--数据“com_数据=重新启动+原因+原因+安全+更新”\
--数据触发器=0\
--数据“开始时间=$STARTDATE”\
--数据“结束时间=$ENDDATE”\
--数据固定=1\
--数据小时数=2\
--数据分钟数=0\
--数据子选项=0\
--数据btnSubmit=Commit\
--不安全\
$NAGURL-u“$USER:$PASS”| grep-q“您的命令请求已成功提交到Nagios进行处理。”| | die“未能联系Nagios”;
回显nagios上的计划停机时间

谢谢Anders…让我试试看,并告诉您结果。Andres。您在哪里找到数据urlencode选项?我还没有在卷曲手册上找到它。你能建议我如何在没有url编码的情况下进行吗?点燃我。我专门在RHEL box上运行curl 7.15…现在不想升级…您可以通过url编码使用其他方法来解决这个问题。有很多方法可以做到这一点,请查看这个问题的答案:匿名,感谢您提供的提示,使我们能够消除对Perl.Works和icinga的依赖。只需确保更改grep验证字符串,当然还有URL。