Linux-服务启动超时控制

服务启动超时控制


问题描述:

服务有时存在等待很长时间启动不起来的情况,需要手动kill掉进程,然后再启动一遍。有没有命令可以自动化这一过程呢?

1 使用timeout指定命令运行的超时时间

timeout 30s java -jar while-1.0-SNAPSHOT.jar

脚本

#!/bin/bash
timeout 30s java -jar while-1.0-SNAPSHOT.jar
exit_pid=$? # 不在这里赋值的话,$?的值就会消失
echo "$? $exit_pid" # 这里的$?的值为0
if [[ $exit_pid == 124 ]];then
  echo "使用exit_pid变量接住退出值,$exit_pid" # 这里使用变量的值就可以正常使用timeout的退出值
fi

日期输出是timeout 后面的jar包输出的,while.jar死循环输出当前的系统时间。

最后的test ? = 124是最后的输出

timeout 超过30s的时候,会把后面执行的jar包的进程给杀掉.可以在脚本运行时和运行后分别通过ps查看while进程是否存在。

ps -ef | grep while

2 使用timeout的退出值

timeout 10s java -jar while-1.0-SNAPSHOT.jar 超时退出的状态码 是124

timeout -s 9 10s java -jar while-1.0-SNAPSHOT.jar 超时退出的状态码 是137

timeout -s 15 10s java -jar while-1.0-SNAPSHOT.jar超时退出的状态码 是124,所以默认使用的是kill -15,退出超时的进程。

$? 需要在退出进程之后,立马使用变量接住这个值,否则之后 $? 的值就会消失。

使用$?的退出值

#!/bin/bash
timeout -s 15 10s java -jar while-1.0-SNAPSHOT.jar
exit_pid=$? # 不在这里赋值的话,$?的值就会消失
echo "$? $exit_pid" # 这里的$?的值为0
if [[ $exit_pid == 124 ]];then
  echo "使用exit_pid变量接住退出值,$exit_pid" # 这里使用变量的值就可以正常使用timeout的退出值
fi

注意:下面的使用方式是不会产生作用的

#!/bin/bash
aaa=`timeout -s 15 10s java -jar while-1.0-SNAPSHOT.jar` # 试图用aaa接收timeout的退出值
echo "$aaa" # 没有获取到,是空
exit_pid=$?
echo "$? $exit_pid" # 只有这两个值 0 0,成功返回是0,0表示的echo命令执行成功
if [[ $exit_pid == 124 ]];then
  echo "使用exit_pid变量接住退出值,$exit_pid"
fi

以上脚本经过验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值