我有一个无限期运行的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次以上的相同命令并不理想。
答案 0 :(得分:3)
在单独的后台进程中运行循环。
#!/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 $?
答案 1 :(得分:1)
我认为你错了,如果...那么条件。 这是我的镜头......它应该在所需的时间只发送一次“特殊命令”。
#!/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