bash脚本没有正确提供MariaDB服务状态

时间:2016-08-07 11:08:56

标签: bash shell centos mariadb centos7

我必须在CentOS 7中检查我的MariaDB服务是否正在运行。

为此,我只创建.sh文件。该文件的内容在

之下
#!/bin/bash
service=mariadb

if ( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 )
then
  echo "$service is running!!!"
else
  echo "$service is not running!!!"
fi

当我运行以下命令时

ps -ef | grep -v grep | grep mariadb | wc -l

如果服务正在运行,则返回1

如果服务停止返回0

以上输出是正确的。

但是当我execute my .sh file时,它会输出错误的输出

如果服务正在运行return(mariadb没有运行!!!)

如果服务停止返回(mariadb没有运行!!!)

1 个答案:

答案 0 :(得分:3)

(用于创建子shell,可能不是你想要的。你可以做到

if [ $(ps -ef | grep -v grep | grep "$service" | wc -l) -gt 0 ]; then

但实际上使用pgrep会更容易,而不是构建自己的管道来查找进程。尝试:

#!/bin/bash
service=mariadb

if pgrep -f "$service"
then
    printf '%s is running!!!' "$service"
else
    printf '%s is not running!!!' "$service"
fi

pgrep将以0退出,如果它是退出状态,则会成功;如果找不到,则为1,如果找不到任何匹配的流程,则为printf

另外,我切换到echo而不是echo。这个示例不应该是问题,但> isn't the preferred way most of the time

在您使用括号的尝试中,您尝试使用0作为比较大的比较,但实际上它将被shell作为重定向运算符使用(我打赌你有一个名为{的文件现在在该目录中{1}}。如果你想做算术的话,你需要双parens ((...)),或者,如果你想测试一些东西,你可以像我上面那样使用方括号。单括号表示在子shell中运行包含的命令。