shell脚本中一段内容执行的时间如果超出10秒则跳出怎么写

shell脚本中一段内容执行的时间如果超出10秒则跳出怎么写,第1张

十秒自动跳出方法很多,shell脚本一般使用建立新的进程,十秒后杀掉。还有expect控制timeout。其它的像python parl就不属于bash范畴了。

我推存给你一个方法,使用lftp,常用的linux衍生版基本都有这个工具,下面是命令,其它方法你自行百度

1.设置一个变量,定义一些lftp的配置,比如超时时间、重试次数等

lftp_set="set dns:fatal-timeout 5set dns:max-retries 1set dns:use-fork noset net:timeout 5set net:max-retries 1"

2.一行lftp命令,功能是登录一个ftp服务,登录后会自行退出,同时五秒自动超时

lftp -c "$lftp_setopen 

:$ftp密码@$ftp服务ip:$ftp服务prot:$目录"

以上两行解决你ftp超时问题,还挺方便的吧

以下是常用的BASH插入数据的脚本,你参考一下,希望你能把你写的放上来,大家都可以帮你看看

aaa=`sqlplus  -silent "/ as sysdba" <<EOF

     set echo off head off pagesize 0

     你插入的语句

     exit

     EOF`

大前提,你用的是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。

可以考虑写个判断脚本

sleep 108000

ps -fe|grep a.sh|grep -v grep

if [ $? -eq 0 ]

then

kill PID (PID自己grep下)

else

b.sh

fi


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

原文地址:https://www.54852.com/bake/11959830.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存