服务启动超时控制
  SIVq11bpWsPF 2023年11月01日 123 0

服务启动超时控制

问题描述:

服务有时存在等待很长时间起不来的情况,需要手动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

以上脚本经过验证。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   113   0   0 Java
  8s1LUHPryisj   2024年05月17日   48   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
SIVq11bpWsPF
作者其他文章 更多