等待N分钟后杀死进程shell脚本

时间:2015-12-26 05:57:37

标签: shell process scripting timeout kill

我正在发布我们与cron一起使用的sh脚本的一部分来对我们的Oracle EBIZ进行冷备份。它大部分时间都有效,偶尔失败,因为脚本监视的一个进程无法停止/终止

代码部分

    su - applprod -c /home/applprod/scripts/Apps_stop.sh
    FNDPROCESS=`ps -ef | grep FNDLIBR | grep applprod | wc -l`
    echo 'We have still running ' $FNDPROCESS ' FNDLIBR for PROD'
    echo 'Please wait...for ' $FNDPROCESS ' seconds!!'

    NPROCESS=$FNDPROCESS
    while [ $FNDPROCESS -gt 0 ]
    do
    FNDPROCESS=`ps -ef | grep FNDLIBR | grep applprod | wc -l`
    if [ $FNDPROCESS -ne $NPROCESS ]
      then
    echo 'We have still running ' $FNDPROCESS ' FNDLIBR for PROD'
    echo 'Please wait...for ' $FNDPROCESS ' seconds!!'
    sleep $FNDPROCESS
    NPROCESS=$FNDPROCESS
    fi
    done    

通常循环在3-4分钟内完成,除非其中一个FNDLIBR进程无法

现在我们需要为上面的循环添加最多30分钟的等待时间,因此,如果等待时间超过29分钟,脚本应该强制终止所有匹配'FNDLIBR'(并发管理器)的进程并退出循环。

请帮帮我:)。

谢谢和问候,

2 个答案:

答案 0 :(得分:1)

您可以使用sleep 1740您的程序将暂停29分钟,在此行之下,您可以编写代码,以杀死所有仍在运行的进程。

答案 1 :(得分:0)

我会使用以下方法:

  • 使用timeout启动你的shell脚本,并指定最大经过时间(29分钟?)和发送信号,如果/超过超时(我建议SIGUSR1,SIGUSR2左右)
  • 修改你的shell脚本以便“捕获”上面的信号并杀死匹配FNDLIBR的进程

这样,当一切正常时,或者脚本监视器无法终止时,过程将花费3或4分钟。