【问题标题】:Timer Event in BashBash 中的定时器事件
【发布时间】:2017-10-10 21:21:29
【问题描述】:

我有一个无限期运行的 bash 脚本。我一直在寻找解决方案,将定时事件添加到每 5 分钟触发一次的脚本中,同时脚本的其余部分继续运行。我不能让脚本休眠,因为它不断地向服务器发送/接收信息。有没有人有任何功能或想法可以做到这一点。基本上我希望它每 300 秒(5 分钟)向服务器发送一个特定的命令。我无权重写服务器代码以每 5 分钟请求一次命令。

基本上主脚本是这样的:

#!/bin/bash

Var1="localhost"
Var2="2356"
Var3="DSDSASAQ"
Var4= "Admin"
#other variables as needed.

function fun1(){
#do some stuff
}
function fun2(){
#do some stuff
}
function fun3(){
#do some stuff
}

#Main code section.
exec 3<>/dev/tcp/${Var1}/${Var2}
echo "login Var4 Var3" >&3

While read LINE <&3;
do
#do some stuff 
done
exit $?

感谢任何帮助。我也尝试过 start=$SECONDS 和 duration=$SECONDS-$start 之类的东西,并在 while 循环中使用 if...then 语句进行检查,但它往往会在重置 start 变量之前多次触发命令。 ..服务器也喜欢在检测到垃圾邮件时断开链接,因此在短时间内发送 10 次以上的相同命令并不理想。

【问题讨论】:

  • 您希望每 300 秒运行一次的命令是什么? (或)是整个脚本吗?
  • 我只需要让它每 5 分钟回显一次 "alive" >&3...没什么特别的......这将防止服务器与脚本断开连接

标签: bash shell timer


【解决方案1】:

我认为你试错了 if...then 条件。 这是我的尝试......它应该只在需要的时间发送一次“特殊命令”。

#!/bin/bash

# Set the "next time" when special command should be sent
((start=SECONDS+300))

while read LINE <&3; do
    echo "do some stuff"

    # Did we reach the "next time" ... if yes
    if ((SECONDS>=start)); then
        echo "special command"
        # And now set the new "next time"
        ((start=SECONDS+300))
    fi
done

【讨论】:

  • 这仍然存在一些延迟问题,但似乎不会向服务器发送垃圾邮件,因此我可以处理一些延迟问题。延迟是触发事件似乎需要两倍的时间,但我可以弥补这一点。
【解决方案2】:

在单独的后台进程中运行循环。

#!/bin/bash

...

#Main code section.
exec 3<>/dev/tcp/${Var1}/${Var2}

# watchdog
while sleep 300 & wait; do
  echo "login Var4 Var3"
done >&3 &
trap "kill $!" EXIT

while read LINE <&3;
do
#do some stuff 
done
exit $?

【讨论】:

    【解决方案3】:

    有很多方法可以做到这一点,cronwatch,甚至是while sleep,都可以想到。

    观看

    watch -n300 command
    

    睡觉时

    while sleep 300; do command; done
    

    cron

    * * * * * sleep 300; command
    

    还有其他方法,但其中一种方法可能适用于您的问题。

    【讨论】:

    • 我已经尝试过监视和睡眠,但对于我正在做的事情都不起作用。我需要整个脚本来不停地运行。并且这两个基本上使它进入休眠状态。 Cron 不适用于此。
    • 嗯,那么您可能应该将screen 与上述方法之一一起使用,请参阅此答案:stackoverflow.com/questions/36364505/bash-cron-flock-screen/…
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多