我必须在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没有运行!!!)
答案 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中运行包含的命令。