Bash脚本“如何运行条件”;如果;“在循环中”;而";有10分钟的时间限制
在这里,我想制作一个Bash脚本,通过使用命令Bash脚本“如何运行条件”;如果;“在循环中”;而";有10分钟的时间限制,bash,shell,Bash,Shell,在这里,我想制作一个Bash脚本,通过使用命令netstat,我想知道应用程序是否已经在侦听端口 如果端口已经被监听了,那么他会给出结果 否则,脚本将在10分钟的时间限制内重复netstat命令,如果超过10分钟,则不会执行该命令,结果是错误 如果在终端中运行手动netstat命令: netstat -atn | grep 8779 结果是: comp@yd:~$ erp-enterprise/bin$ netstat -atn | grep 8779 tcp6 0 0
netstat
,我想知道应用程序是否已经在侦听端口
如果端口已经被监听了,那么他会给出结果
否则,脚本将在10分钟的时间限制内重复netstat
命令,如果超过10分钟,则不会执行该命令,结果是错误
如果在终端中运行手动netstat
命令:
netstat -atn | grep 8779
结果是:
comp@yd:~$ erp-enterprise/bin$ netstat -atn | grep 8779
tcp6 0 0 :::8779 :::* LISTEN
comp@yd:~$ ./listen_port.sh
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
下面是我制作的脚本,下一步是什么
#!/bin/bash
NETSTAT=`netstat -ant | grep :::8779`
echo $NETSTAT
VAR_ERR="Port APP 8779, not listen !"
VAR_SUCS="Port APP 8779, LISTEN"
while [[ "$NETSTAT" = "" ]] ;
do
echo $NETSTAT
if [[ -z "$NETSTAT" ]];
then
echo $VAR_ERR
NETSTAT=`netstat -ant | grep :::8082`
else
echo $VAR_SUCS
exit 0
done
echo $VAR_SUCS
如果应用程序未侦听端口,脚本将继续循环
结果是:
comp@yd:~$ erp-enterprise/bin$ netstat -atn | grep 8779
tcp6 0 0 :::8779 :::* LISTEN
comp@yd:~$ ./listen_port.sh
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
如果应用程序已经在侦听端口,脚本将停止并弹出结果
comp@yd:~$ ./listen_port.sh
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8082, not listen !
Port APP 8779, LISTEN
如何为停止的脚本指定时间限制?您可以使用
timeout
命令:
timeout 10m /path/to/your_script.sh
上述命令将启动/path/to/your_script.sh
,如果未自行终止,则在10分钟后终止
进一步阅读:您可以使用
timeout
命令:
timeout 10m /path/to/your_script.sh
上述命令将启动/path/to/your_script.sh
,如果未自行终止,则在10分钟后终止
进一步阅读:我喜欢@hek2mgl的解决方案,但如果您确实希望在脚本中执行此操作,则可以使用变量来查看经过了多少时间。因此,您的循环可以将条件更改为
while [[ "$NETSTAT" = "" ]] && [[ $SECONDS -lt 600 ]];
或
要使用内置测试来判断字符串是否为空,我喜欢@hek2mgl的解决方案,但是如果您确实想在脚本中进行测试,可以使用变量来查看经过了多少时间。因此,您的循环可以将条件更改为
while [[ "$NETSTAT" = "" ]] && [[ $SECONDS -lt 600 ]];
或
要使用内置测试来判断字符串是否为空,可以在bash脚本中进行测试,而不依赖于其他工具:
#! /bin/bash
trap 'echo "error after retrying for $secs"; exit 1' USR1
secs=600
{ sleep $secs; kill -s USR1 0; } &
while :
do
netstat -ant | grep -q :::8082 && exit 0
sleep 1
done
您可以在bash脚本中执行此操作,而不依赖于其他工具:
#! /bin/bash
trap 'echo "error after retrying for $secs"; exit 1' USR1
secs=600
{ sleep $secs; kill -s USR1 0; } &
while :
do
netstat -ant | grep -q :::8082 && exit 0
sleep 1
done
不确定什么应该有时间限制,但您可以在循环中重试,直到经过一定的时间,或者您可以使用运行命令。哦,是的,先生。。但我试着在上面解释,展示我的bash脚本,以及如何继续我的脚本?如何添加脚本?所以我的意思是,sir,你是想在脚本中设置一个超时,还是想在执行时设置一个超时?(请不要叫我“先生”)好的,我想在脚本的循环部分@BiffenDo中给出一个超时,你想让循环本身停止,还是想让对
netstat
的调用超时?不确定什么应该有时间限制,但你可以在循环中重试,直到经过一定的时间,或者你可以用它来执行命令是的,长官。。但我试着在上面解释,展示我的bash脚本,以及如何继续我的脚本?如何添加脚本?所以我的意思是,sir,你是想在脚本中设置一个超时,还是想在执行时设置一个超时?(请不要叫我“先生”)好的,我想在脚本的循环部分@BiffenDo中给出一个超时,你想让循环本身停止,还是想让对netstat
的调用超时?