gpt4 book ai didi

linux - 使用 "watch"在 Bash 中重复运行一个函数?

转载 作者:IT王子 更新时间:2023-10-29 01:00:22 25 4
gpt4 key购买 nike

这是我的第一个 Bash 脚本。我的 Debian 机器有 WiFi 问题。我不是来这里询问原因的,而是如何在 Bash 问题上贴上创可贴。我的 WiFi 会随机中断,通常每 12-15 分钟一次。我在此服务器上使用 SSH,不想从物理服务器手动运行 ifdown wlan0ifup wlan0(重新连接 WiFi)。

这个Bash脚本的作用是尝试连接3次。如果失败三次,它就会放弃。否则,它会每隔三秒通过尝试 ping Google 来检查我的服务器是否已连接。

#!/bin/bash

ATTEMPTS=1

function test_connection {
ping -c 1 www.google.com
local EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]
then
return true
else
return false
fi
}
function reset_connection {
ifdown wlan0
ifup wlan0
EXIT_CODE=$((EXIT_CODE+1))
}
function connection_test_loop {
if [ $ATTEMPTS -ge 3 ]
then
echo CONNECTION FAILED TO INITIALIZE ... ATTEMPT $ATTEMPTS FAILED ... EXITING
exit
fi
if ! [ test_connection ]
then
echo CONNECTION DROPPED ... ATTEMPTING TO RE-ESTABLISH CONNECTION ... ATTEMPT $ATTEMPTS
reset_connection
fi
}

test_connection
if [ $? ]
then
echo CONNECTION PRE-ESTABLISHED
watch -n 3 connection_test_loop
else
echo CONNECTION FAILED TO INITIALIZE ... ATTEMPTING TO RESET CONNECTION ... ATTEMPT $ATTEMPTS
reset_connection
if [ $? ]
then
echo CONNECTION ESTABLISHED
watch -n 3 connection_test_loop
else
echo CONNECTION FAILED TO INITIALIZE ... ATTEMPT $ATTEMPTS FAILED ... EXITING
exit
fi
fi

我已经确定了我在使用此脚本时遇到的问题。在于用watch调用connection_test_loop函数。我一直无法找到任何信息来说明为什么它没有按预期执行并且每三秒运行一次该功能。

最佳答案

watch 可能不知道您的 connection_test_loop 函数。您可以尝试添加一个 export 下面的 test_connection 或许可以解决问题:

test_connection
export -f connection_test_loop
...

http://linuxcommand.org/lc3_man_pages/exporth.html

调用watch时,你可能需要这样的语法:

watch -x bash -c connection_test_loop

关于linux - 使用 "watch"在 Bash 中重复运行一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com