Bash中的计时器事件
我有一个无限期运行的bash脚本。我到处寻找解决方案,在脚本的其余部分保持运行的同时,向脚本中添加一个每5分钟触发一次的定时事件。我不能让脚本睡眠,因为它不断地向服务器发送/接收信息。有没有人有任何功能或想法可以实现这一点。基本上,我希望它每300秒(5分钟)向服务器发送一个特定的命令。我没有权限使重写服务器代码以每5分钟请求一次命令 基本上,主脚本与此类似:Bash中的计时器事件,bash,shell,timer,Bash,Shell,Timer,我有一个无限期运行的bash脚本。我到处寻找解决方案,在脚本的其余部分保持运行的同时,向脚本中添加一个每5分钟触发一次的定时事件。我不能让脚本睡眠,因为它不断地向服务器发送/接收信息。有没有人有任何功能或想法可以实现这一点。基本上,我希望它每300秒(5分钟)向服务器发送一个特定的命令。我没有权限使重写服务器代码以每5分钟请求一次命令 基本上,主脚本与此类似: #!/bin/bash Var1="localhost" Var2="2356" Var3="DSDSASAQ" Var4= "Adm
#!/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
与上述方法之一结合使用,请参见以下回答:这仍然存在一些延迟问题,但似乎不会向服务器发送垃圾邮件,因此我可以处理一些延迟问题。延迟是触发事件所需时间的两倍,但我可以对此进行补偿。