Bash 如何从Nagios设置Docker容器的监视
我正在尝试从nagios设置docker容器的监视。我的nagios在一个VM上,docker在另一个VM上。因此,为了监控docker,我尝试使用: 并将文件放在location/usr/lib64/nagios/plugins/ 但当我运行这个脚本时,它往往会抛出错误 错误: 检查\u docker:第40行:语法错误:意外的文件结尾 作为一个爪哇人,我真的不太了解这一点 那么,有谁能告诉我,我如何才能完成监控码头工人的任务,因为我已经在这方面浪费了我的时间Bash 如何从Nagios设置Docker容器的监视,bash,docker,nagios,Bash,Docker,Nagios,我正在尝试从nagios设置docker容器的监视。我的nagios在一个VM上,docker在另一个VM上。因此,为了监控docker,我尝试使用: 并将文件放在location/usr/lib64/nagios/plugins/ 但当我运行这个脚本时,它往往会抛出错误 错误: 检查\u docker:第40行:语法错误:意外的文件结尾 作为一个爪哇人,我真的不太了解这一点 那么,有谁能告诉我,我如何才能完成监控码头工人的任务,因为我已经在这方面浪费了我的时间 提前感谢您的帮助。问题是复制/粘
提前感谢您的帮助。问题是复制/粘贴过程中出现意外的eol字符。 这实际上是一个Bash问题,或者更具体地说。。。这是一个特殊的字符在结尾,你可能看不到,因为你可能复制/粘贴从一个网站 问题原因: 很多网站都提到了eol问题,但都是简明扼要的 DOS使用回车符和换行符
(“\r\n”)
作为行尾,Unix只使用换行符(“\n”)
。在Windows机器和Unix机器之间传输文件时需要小心,以确保正确翻译行尾
解决方案:
要修复unix样式eol的行尾,请运行dos2unix file.sh
,但可能需要先安装该实用程序。在Ubuntu中,它将是sudo-apt-get-install-dos2unix
。根据环境的不同,你的情况也可能相同
备选方案:
如果你想知道最后到底是什么,你可以看看Windows上的记事本+,因为它了解各种格式的下线字符。您需要启用菜单中的所有字符
在Linux上,将显示相同的内容:
使用M-x空白模式RET进行本地切换
,或查看链接了解(许多)详细信息和示例
#!/bin/bash
# Author: Erik Kristensen
# Email: erik@erikkristensen.com
# License: MIT
# Nagios Usage: check_nrpe!check_docker_container!_container_id_
# Usage: ./check_docker_container.sh _container_id_
#
# The script checks if a container is running.
# OK - running
# WARNING - container is ghosted
# CRITICAL - container is stopped
# UNKNOWN - does not exist
CONTAINER=$1
RUNNING=$(docker inspect --format="{{ .State.Running }}" $CONTAINER 2> /dev/null)
if [ $? -eq 1 ]; then
echo "UNKNOWN - $CONTAINER does not exist."
exit 3
fi
if [ "$RUNNING" == "false" ]; then
echo "CRITICAL - $CONTAINER is not running."
exit 2
fi
GHOST=$(docker inspect --format="{{ .State.Ghost }}" $CONTAINER)
if [ "$GHOST" == "true" ]; then
echo "WARNING - $CONTAINER has been ghosted."
exit 1
fi
STARTED=$(docker inspect --format="{{ .State.StartedAt }}" $CONTAINER)
NETWORK=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" $CONTAINER)
echo "OK - $CONTAINER is running. IP: $NETWORK, StartedAt: $STARTED"