2015-07-10 136 views
0

我正在嘗試設置從nagios監控docker容器。我的nagios在一個虛擬機上,而我的泊塢窗在另一個虛擬機上。因此,監測泊塢窗我試圖使用the shell script below如何設置從Nagios監控Docker容器

#!/bin/bash 

# Author: Erik Kristensen 
# Email: [email protected] 
# 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的/插件/ 但是當我運行此腳本它往往拋出時發生錯誤,

錯誤:

check_docker: line 40: syntax error: unexpected end of file

作爲一個Java的傢伙我真的不知道這在很大程度上

所以可能有人請告訴我如何能實現監控泊塢窗的這個任務,因爲我已經浪費了我的時間

感謝您的幫助提前。

回答

1

問題是從複製/粘貼意外eol字符。

這實際上是一個Bash問題,或更具體的......這是一個特殊的字符,你可能看不到,因爲你可能從網站複製/粘貼。

原因問題:

很多網站提EOL的問題,但look here的東西短,重點突出。

DOS uses carriage return and line feed ("\r\n") as a line ending, which Unix uses just line feed ("\n") . You need to be careful about transferring files between Windows machines and Unix machines to make sure the line endings are translated properly.

解決方案:

要解決的UNIX風格EOL行尾,運行dos2unix file.sh但您可能需要先安裝實用程序。在Ubuntu中它將是sudo apt-get install dos2unix。取決於環境,它對你來說可能是一樣的。

替代方案:

如果你想找出究竟是什麼在最後,你可以看看記事本+上的Windows,因爲它瞭解各種格式的EOL字符。您需要啓用菜單中的所有字符。

Notepad++ eol setting

的LinuxEmacs Whitespace mode將表現出同樣的事情:

M-x whitespace-mode RET切換本地或看到的鏈接(許多)細節和例子。