如果该行需要更多时间来执行,请跳过 shell 脚本中的执行行

问题描述

我有一个 shell 脚本可以停止 IBM WebSphere 中的 JVM

如下图

//Some code 
sh /application/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopServer.sh JMS-Server -username admin -password ...... 
echo "Stop xyzServer JVM" 
//Some code

我的问题是,有时需要花费很多时间来停止服务器,因此脚本将继续运行并且永远不会结束

我需要一个解决方案来跳过这行执行,如果这段代码等待JVM停止完成,如果JVM在一定时间后没有停止,执行应该移动到下一行

你能帮忙吗?

解决方法

我会尝试在您的命令末尾附加 &,这将在后台 shell 中运行它。然后,在您 echo 添加 sleep 命令后,您想在继续之前等待停止命令的时间长度。总的来说,类似于:

//Some code 
sh /application/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopServer.sh JMS-Server -username admin -password ...... &
echo "Stop xyzServer JVM" 
sleep 10m
//Some code```
,

使用超时命令:

//Some code 
timeout 180 sh /application/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopServer.sh JMS-Server -username admin -password ...... && echo "Stopped xyzServer JVM" || echo "xyzServer JVM stop,timeout" 
//Some code

运行 stopServer.sh 脚本,如果它在 180 秒内没有返回退出代码或者退出代码不是 0,则打印“xyzServer JVM stop,timeout”否则打印“Stopped xyzServer JVM”