繁体   English   中英

Linux Shell脚本中的条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM