linux的shell脚本中等待子程序执行超时

linux的shell脚本中等待子程序执行超时,第1张

判断进程是否存在。示例:

timer=20 #20s定时器

flag=1 #标识进程是否存在

while [ $timer -gt 0 ]

do

    sleep 2

    ps -aux | grep 进程名 | grep -v grep >/dev/null #查询进程

    [ $? -ne 0 ] && flag=0 && break #进程不存在了就退出循环

    let timer-=1

done

[ $flag -eq 1 ] && kill -9 $(ps -aux | awk '/ bash$/{print $1}')

大前提,你用的是bash,其他shell应该也有类似的任务管理功能,具体你自己去查。

简单说一下思路,假定你那个有 flock 的脚本叫 a.sh, 你不要直接在crontab中调用 a.sh,而是调用另外一个脚本,比如 main.sh,main.sh 应该长成这个样子

#!/bin/bash

# 启动 a.sh

/path/to/a.sh &  

# 每秒钟检查一下 a.sh 是否结束,如果结束,则退出当前进程,如果10秒钟后a.sh仍未结束,则kill掉它

for (( x=0 x<10 x++ )) do

  sleep 1

  # 检查a.sh 任务是否存在

  jobs %1 2>/dev/null

  if [ $? -ne 0 ] then

      # a.sh 已经结束

      exit 0

  fi

done

超时,kill 掉 a.sh  

kill -9 %1

如上面的注释,main.sh 后台启动 a.sh 后,在10秒内不断的检查这个任务是否还在运行,如果不在了,那说明 a.sh 已经结束了,那 main.sh 也可以结束。如果超时,则强行杀掉 a.sh。

linux部署名前端访问后端超时

答:首先要确定超时原因才能有效解决问题,可以考虑在 Linux 上查看相关日志,如果发现超时是由前端系统请求超时造成,可以考虑如下解决办法:

1. 检查后端服务器是否正常工作,并且是否有及时响应前端请求;

2. 查看前端服务器是否正确配置了响应超时时间;

3. 检查网络环境是否异常,是否存在流量拥塞等情况;

4. 检查前端系统是否消耗了系统资源,生成了过多的临时文件等情况;

5. 更换较高性能的服务器,提升前端系统处理请求的速度。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7539293.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存