shell脚本出错

时间:2015-03-10 22:00:39

标签: shell

我遇到了一个我无法找到的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 &

1 个答案:

答案 0 :(得分:1)

您必须在子shell中调用程序SERVICE,并在]之前添加空格。

if [ "$(${SERVICE} status)" == "${STOPPED_MESSAGE}" ];

编辑:
您可能希望在测试之前将状态存储在var中:

tomstatus=$(${SERVICE} status | strings)
echo "Debug: Status=${tomstatus}."
if [ "${tomstatus}" = "${STOPPED_MESSAGE}" ]; then

我添加了字符串,也许有控制字符将单词tomcat变为蓝色。