[英]Conditions in Linux shell scripting
我正在编写一个简单的Linux Shell脚本,用于检查正在运行的服务的状态,如果没有任何进程在运行,它将显示未运行的进程的名称。
我已经在下面尝试过,并且现在停留在else语句中。 我要输出的else语句是显示的具有非零值的4个变量的名称。
如果RUNWRAPPERSTATUS和EKYCSTATUS不为零,则输出应如下所示。
There is some while starting RUNWRAPPER AND EKYC . Kindly verify
实际代码从这里开始:
ps -aef | grep -i NGEjbClient
RUNWRAPPERSTATUS=$(echo $?)
ps -aef | grep -i startSMS
RUNSTATUS=(echo $?)
ps -aef | grep -i DirectoryService
DISSTATUS=(echo $?)
ps -aef | grep -i EKYCUploadWorkitem
EKYCSTATUS=(echo $?)
if [ $RUNWRAPPERSTATUS -eq 0 ] && [ $RUNSTATUS -eq 0 ] && [ $DISSTATUS -eq 0 ] && [ $EKYCSTATUS -eq 0 ]
then
echo "Jboss Services and App Services started"
一个简单的脚本展示了您可以做什么:
SERVICES="NGEjbClient startSMS DirectoryService EKYCUploadWorkitem"
for service in $SERVICES
do
if ! pgrep $service
then
echo "$service is not running. Please verify"
fi
done
笔记:
pgrep
搜索进程名称 与其将退出状态收集在单独的变量中,不如将失败的服务名称数组化。 我也将遍历服务,而不是为每个服务编写一个明确的单独测试。
但是还有另一个问题: ps | grep something
ps | grep something
模式倾向于找到grep
命令,该命令给出了误报。 避免这种情况的一种方法是将grep -v grep
添加到管道中。
如果您不想打印找到的进程条目,请将-q
选项添加到管道中的最后一个grep
。 重要提示:它必须是最后一个,否则将不起作用。
failedServices=() # This creates an empty array
for service in NGEjbClient startSMS DirectoryService EKYCUploadWorkitem; do
ps -aef | grep -i "$service" | grep -vq grep || # Remove "q" option to print matches
failedServices+=("$service") # +=() appends to the array
done
if (( ${#failedServices[@]} == 0 )); then # This tests the number of elements in the array
echo "Jboss Services and App Services started"
else
echo "Some service(s) have not started:" "${failedServices[@]}"
fi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.