我正在尝试从nagios设置docker容器的监视。我的nagios在一个VM上,而我的docker在另一个VM上。所以为了监控docker我正在尝试使用the shell script below:
#!/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"
并将文件放在/ usr / lib64 / nagios / plugins /上 但是当我运行这个脚本时,它往往会抛出错误。
错误:
check_docker:第40行:语法错误:意外的文件结尾
作为一个java家伙,我真的不太了解这个
任何人都可以告诉我如何实现监控码头工作的任务,因为我已经浪费了我的时间
提前感谢您的帮助。
答案 0 :(得分:1)
问题是来自复制/粘贴的意外eol字符。
这实际上是一个Bash问题,或者更具体......它最后是一个特殊字符,您可能无法看到,因为您可能会从网站上复制/粘贴。
问题原因:
很多网站都提到了eol问题,但look here提到了一些简短而重要的事情。
DOS使用回车符和换行符
("\r\n")
作为行结尾,Unix只使用换行符("\n")
。您需要注意在Windows机器和Unix机器之间传输文件,以确保正确转换行结束。
<强>解决方案:强>
要修复unix样式eol的行结尾,请运行dos2unix file.sh
,但您可能需要先安装该实用程序。在Ubuntu中它将是sudo apt-get install dos2unix
。根据环境的不同,它可能与您相同。
<强>备选方案:强>
如果您想确切了解最后的内容,可以在 Windows 上查看Notepad ++,因为它了解各种格式的eol字符。您需要在菜单中启用所有字符。
在 Linux 上,Emacs Whitespace mode会显示相同的内容:
使用M-x whitespace-mode RET
在本地切换或查看(许多)详细信息和示例的链接。