Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash中的计时器事件_Bash_Shell_Timer - Fatal编程技术网

Bash中的计时器事件

Bash中的计时器事件,bash,shell,timer,Bash,Shell,Timer,我有一个无限期运行的bash脚本。我到处寻找解决方案,在脚本的其余部分保持运行的同时,向脚本中添加一个每5分钟触发一次的定时事件。我不能让脚本睡眠,因为它不断地向服务器发送/接收信息。有没有人有任何功能或想法可以实现这一点。基本上,我希望它每300秒(5分钟)向服务器发送一个特定的命令。我没有权限使重写服务器代码以每5分钟请求一次命令 基本上,主脚本与此类似: #!/bin/bash Var1="localhost" Var2="2356" Var3="DSDSASAQ" Var4= "Adm

我有一个无限期运行的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 $?
#/bin/bash
Var1=“localhost”
Var2=“2356”
Var3=“dsasaq”
Var4=“Admin”
#其他需要的变量。
函数fun1(){
#做点什么
}
函数fun2(){
#做点什么
}
函数fun3(){
#做点什么
}
#主要代码部分。
exec 3/dev/tcp/${Var1}/${Var2}
echo“login Var4 Var3”>&3

读行时,有很多方法可以做到这一点,
cron
watch
,甚至睡觉时都会想到

观看

watch -n300 command
睡觉时

while sleep 300; do command; done
cron

* * * * * sleep 300; command

还有其他方法,但其中一种方法可能对您的问题有效。

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

#!/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 $?
#/bin/bash
...
#主要代码部分。
exec 3/dev/tcp/${Var1}/${Var2}
#看门狗
而睡眠300&等待;做
echo“login Var4 Var3”
完成>&3&
陷阱“杀死$!”退出

读这行时,我想你们试错了,若…那个么条件。 这是我的拍摄。。。在规定的时间内只发送一次“特别命令”

#!/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
#/bin/bash
#设置应发送特殊命令的“下一次”
((开始=秒+300))
当读取行=开始时);然后
回声“特别命令”
#现在设置新的“下一次”
((开始=秒+300))
fi
完成

每300秒要运行的命令是什么?(或者)它是整个脚本吗?我只需要让它每5分钟回显一次“alive”>&3…没什么奇怪的…这将防止服务器中断与脚本的连接我尝试过观看和睡觉时,这两种方法都不适用于我正在做的事情。我需要整个脚本不间断地运行。这两者基本上都使它进入冬眠状态。Cron对此不起作用。Hmmm,那么您可能应该将
screen
与上述方法之一结合使用,请参见以下回答:这仍然存在一些延迟问题,但似乎不会向服务器发送垃圾邮件,因此我可以处理一些延迟问题。延迟是触发事件所需时间的两倍,但我可以对此进行补偿。