我有一个定制的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