Linux 关键文件不存在!使用perl脚本监视apache日志时出错

Linux 关键文件不存在!使用perl脚本监视apache日志时出错,linux,shell,sh,nagios,Linux,Shell,Sh,Nagios,我是perl新手。我得到这个错误: CRITICAL : "file does not exist" 当我试图运行脚本来监视Nagios的httpd错误日志时 #!/bin/sh # Created by Brian Weber <brian@bdweber.net> Jan 5, 2012 # check_file_md5s # Checks the md5sum of a particular file against one stored in a predetermined

我是perl新手。我得到这个错误:

CRITICAL : "file does not exist"
当我试图运行脚本来监视Nagios的httpd错误日志时

#!/bin/sh
# Created by Brian Weber <brian@bdweber.net> Jan 5, 2012
# check_file_md5s
# Checks the md5sum of a particular file against one stored in a predetermined list.
# No arguments will return usage.
# Please read usage statement for further detail.

# Modeled after / inspired by / replacing check_file_md5s by Stephen Berg, et al.

VERSION=0.1

MD5=`which md5sum`
MD5_LIST="/usr/local/nagios/md5s"


function check_file_md5() {
        if [ -f $ARG ]; then
                if [ `grep $ARG $MD5_LIST | wc -l` -eq 1 ]; then
                        if [ `grep $ARG $MD5_LIST | cut -d\  -f1` = `$MD5 $ARG | cut -d\  -f1` ]; then
                                echo OK
                                exit 0
                        else
                                echo "WARNING - md5sum does not match! Rebuilding so the next check will match."
                                rebuild_md5_list
                                exit 2
                        fi
                else
                        echo "WARNING - md5sum is not in list. Adding for you now."
                        echo `$MD5 $ARG` >> $MD5_LIST
                        exit 1
                fi
        else
                echo "CRITICAL - file does not exist!"
                exit 2
        fi
}

function show_usage() {
        echo ""
        echo "    $0 - plugin for checking arbitrary md5sum against a predetermined list."
        echo "    This list lives at $MD5_LIST"
        echo "    New files need to be added by doing the following command:"
        echo "             $MD5 /path/to/file >> $MD5_LIST"

       echo ""
        echo "    Usage:   $0 /path/to/file"
        echo "             $0 --help"
        echo ""
        echo "    Version: $VERSION"
        echo ""
}

function rebuild_md5_list() {
        MD5_DATE=${MD5_LIST}.`date +%Y%m%d`
        mv $MD5_LIST $MD5_DATE

        for FILE in `cat $MD5_DATE | awk '{ print $2 }' | sort | uniq | xargs`; do
                md5sum ${FILE} >> $MD5_LIST
        done
}

if [ -z "$1" ]; then
        show_usage
        exit 2
fi

case $1 in
        --help)
                show_usage
                exit 0
                ;;
        *)
                ARG=$1
                check_file_md5
                ;;
esac
#/垃圾箱/垃圾箱
#由Brian Weber于2012年1月5日创建
#检查文件
#将特定文件的md5sum与存储在预定列表中的md5sum进行检查。
#没有参数将返回用法。
#有关更多详细信息,请阅读使用说明。
#模仿Stephen Berg等人的check_file_md5s,其灵感来源于/取代了该文件。
版本=0.1
MD5=`哪个md5sum`
MD5_LIST=“/usr/local/nagios/md5s”
函数检查\u文件\u md5(){
如果[-f$ARG];则
如果[`grep$ARG$MD5_LIST | wc-l`-eq 1];那么
如果[`grep$ARG$MD5_LIST | cut-d \-f1`=`$MD5$ARG | cut-d \-f1`],则
回声OK
出口0
其他的
echo“警告-md5sum不匹配!正在重建,以便下次检查匹配。”
重建md5列表
出口2
fi
其他的
echo“警告-md5sum不在列表中。现在为您添加。”
回显“$MD5$ARG`>$MD5\u列表
出口1
fi
其他的
echo“关键-文件不存在!”
出口2
fi
}
函数show_用法(){
回声“”
echo“$0-用于根据预定列表检查任意md5sum的插件。”
echo“此列表位于$MD5_列表”
echo“需要通过执行以下命令添加新文件:”
echo“$MD5/path/to/file>>$MD5\u列表”
回声“”
echo“用法:$0/path/to/file”
回显“$0--帮助”
回声“”
echo“版本:$Version”
回声“”
}
函数重建\u md5\u列表(){
MD5_DATE=${MD5_LIST}.`DATE+%Y%m%d`
mv$MD5_列表$MD5_日期
对于'cat$MD5|u DATE | awk'{print$2}'中的文件| sort | uniq | xargs | do
md5sum${FILE}>>$MD5\u列表
完成
}
如果[-z“$1”];然后
显示你的用法
出口2
fi
每箱1元
--(帮助)
显示你的用法
出口0
;;
*)
ARG=$1
检查\u文件\u md5
;;
以撒
有人能帮我吗?

除了已经发布的(正确的)评论之外:您可以从您的列表中看到,显示的消息是,iff$ARG不是一个普通文件


顺便说一句,我建议输出$ARG的值。

这是shell脚本,不是perl。您可以在代码的第一行看到它:
#/bin/sh
。这不是一个错误,脚本正在打印该行。谢谢,是的,它是shell脚本,正如我提到的,我正在nagios中监视错误日志,所以我希望结果是ok或critical。在这种情况下,它总是显示critical,但如果我在tty上运行此脚本,结果是ok的。你能再详细说明一下吗?嗯,你确认过ARG在两种情况下是相同的吗?为了进一步调试,我将列出$ARG父目录的内容,特别是访问权限。可能在Nagios下运行脚本时,“Nagios用户”没有查看目录的权限。