脚本 bash 检查服务是否正在运行

脚本 bash 检查服务是否正在运行

我有一个定制的linux版本,内核版本是4.1.15-klk我的平台架构是armv7l GNU/Linux

我正在尝试检查我的进程是否正在运行:

我试过这个:

#!/bin/sh
service=myservice

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

但它给了我“我的服务正在运行!!!”是否正在运行

我无法使用 pgrep,因为它在我的系统中不可用

有任何想法吗?谢谢!

答案1

基于这个问题,简短且可编写脚本的方法是:

systemctl is-active --quiet service

如果服务正在运行,它将以代码零退出。

打印 sshd 服务是否正在运行的示例:

systemctl is-active --quiet sshd && echo "sshd is running" || echo "sshd is NOT running"

答案2

使用下面的脚本检查服务是否正在运行。我测试了 mysql 服务,让它启动和关闭,并且在这两种情况下都工作正常。

#!/bin/bash
i=`ps -eaf | grep -i mysql |sed '/^$/d' | wc -l`
echo $i
if [[ $i > 1 ]]
then
  echo "service is running"
else
  echo "service not running"
fi  

答案3

终于用这个邮政,我能够解决我的问题:

#!/bin/sh
service=myservice

case  "$(pidof $service | wc -w)" in
0) echo "$service is not running!!!"
;;
1) echo "$service is  running!!!"
;;
*) echo "multiple instances running"
;;
esac

答案4

您可以使用 case 函数来更好地控制它。

#!/bin/bash
i=$(ps -eaf | grep -i mysql | sed '/^$/d' | wc -l); echo $i
case $i in
    0) echo "The mysql service is 'not running'.";;
    1) echo "The mysql Service has 'failed'. You may need to restart the service";;
    2) echo "The mysql service is 'running'. No problems detected.";;
esac

第一个例子有一个错误。 '|'、'||'、'&' 或 '&&' 前后必须有空格

所以它应该读

i=$(ps -eaf | grep -i mysql | sed '/^$/d' | wc -l); echo $i

相关内容