我遇到了一个我无法找到的shell脚本问题。我100%肯定这是明显,简单和愚蠢的东西,但我很难过。
这是脚本
# /bin/sh
SERVICE=/etc/init.d/tomcat
STOPPED_MESSAGE="Tomcat is not running"
if [ "$SERVICE status" == "$STOPPED_MESSAGE"];
then
{
$SERVICE start
}
fi
运行时遇到的错误就是这个。
[root in /istorelogs]# sh recover-tomcat.sh
recover-tomcat.sh: line 5: [: missing `]'
非常感谢任何帮助。感谢
因此,要查看if语句是否正常工作,我添加了一个命令,在启动tomcat备份之前将catalina.out复制到另一个目录。这是更新的脚本。当tomcat关闭时,我从服务tomcat状态获得输出。
#! /bin/sh
SERVICE=/etc/init.d/tomcat
STOPPED_MESSAGE="Tomcat is not running"
if [ "$(${SERVICE} status)" == "$STOPPED_MESSAGE" ];
then
{
cp /usr/local/tomcat/logs/catalina.out /istorelogs/cattest.out
$SERVICE start
}
fi
[root in /istorelogs]# service tomcat status
Tomcat is not running
我尝试了下面列出的两种方法而没有任何运气。然后我试了一下。
#! /bin/sh
SERVICE=/etc/init.d/tomcat
STOPPED_MESSAGE="Tomcat is not running"
if (( $(service tomcat status) = "Tomcat is not running" ));
then
{
cp /usr/local/tomcat/logs/catalina.out /istorelogs/cattest.out
$SERVICE start
}
fi
然后我得到了这个输出,这让我相信我只是有一个轻微的语法问题需要克服这个方法。不知道它是什么。
recover-tomcat.sh:第4行:((:Tomcat未运行= Tomcat未运行:语法错误:操作数预期(错误标记为“Tomcat未运行= Tomcat未运行”)
好的,我在手动运行时让脚本工作,但是当它用完cron时它似乎不起作用。这是工作脚本。
#! /bin/sh
TOMSTATUS=$(service tomcat status)
STOPPED_MESSAGE="Tomcat is not running"
SERVICE=/etc/init.d/tomcat
echo $TOMSTATUS
echo $STOPPED_MESSAGE
if [ "${TOMSTATUS}" = "${STOPPED_MESSAGE}" ];
then
{
cp /usr/local/tomcat/logs/catalina.out /istorelogs/cattest.out
$SERVICE start
}
fi
这是脚本的cron条目,它正在尝试运行每一分钟并且根据cron日志,但它没有按预期执行
* * * * * sh /istorelogs/recover-tomcat.sh &
答案 0 :(得分:1)
您必须在子shell中调用程序SERVICE,并在]之前添加空格。
if [ "$(${SERVICE} status)" == "${STOPPED_MESSAGE}" ];
编辑:
您可能希望在测试之前将状态存储在var中:
tomstatus=$(${SERVICE} status | strings)
echo "Debug: Status=${tomstatus}."
if [ "${tomstatus}" = "${STOPPED_MESSAGE}" ]; then
我添加了字符串,也许有控制字符将单词tomcat变为蓝色。