路由器定时重启脚本
在一些网络环境中,路由器可能因为长时间运行或其他原因而出现卡顿或网络问题。为了确保路由器的稳定性,定期重启是一个有效的解决方案。本文将介绍如何通过SSH远程登录路由器,并使用wget
命令编写一个定时重启脚本,最后通过crontab
设置定时任务自动执行。
步骤 1: 远程登录路由器
首先,确保你的路由器防火墙已经开启22端口,这样我们才能通过SSH进行远程访问。
使用以下命令进行SSH登录:
ssh -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1
步骤 2: 创建重启脚本目录
在路由器中创建一个目录来存放重启脚本:
mkdir -p /usr/bin/restart-router
步骤 3: 创建并编辑重启脚本
使用touch
命令创建一个名为tyReboot.sh
的脚本文件,并确保其具有执行权限:
touch tyReboot.sh
chmod +x tyReboot.sh
编辑tyReboot.sh
文件,并将以下内容粘贴到其中:
#!/bin/sh
# 删除日志文件
rm log.txt
rm res.txt
rm reboot.txt
# 记录日志
wget --method='POST' -a log.txt --save-cookie='ck.txt' --body-data='username=yourusername&psd=yourpassword' --max-redirect=0 --keep-session-cookies -d http://192.168.1.1/cgi-bin/luci
# 获取cookie中的sysauth值
sysauth=$(cat log.txt | grep 'Set-Cookie' | awk -F'sysauth=' '{print $2}' | cut -d';' -f1)
echo "登录sysauth: $sysauth"
# 使用sysauth值获取响应内容
wget --method='GET' --header="Cookie: sysauth=$sysauth" -O res.txt -d http://192.168.1.1/cgi-bin/luci
# 提取token值
token=$(cat res.txt | sed 's/{/\n/g' | sed 's/}/\n/g' | grep token | awk -F"'" '/token/ {if (!printed) {print $2; printed=1}}')
echo "token: $token"
# 准备token进行路由器重启
mytoken='token='$token
# 提交重启请求
wget --method='POST' --header="Cookie: sysauth=$sysauth" -O reboot.txt --body-data="$mytoken" http://192.168.1.1/cgi-bin/luci/admin/reboot
if [ $? -ne 0 ]; then
echo $mytoken reboot failed
else
echo $mytoken rebooting!
fi
步骤 4: 设置定时任务
为了定期执行该脚本,我们可以使用crontab
来设置定时任务。在路由器中,输入以下命令来编辑定时任务:
crontab -e
在打开的crontab
编辑器中,添加以下行来设置每天凌晨4:59自动执行重启脚本:
59 4 * * * /usr/bin/restart-router/tyReboot.sh
使用crontab -l
命令可以查看当前的定时任务列表。
总结
通过以上步骤,你可以轻松地实现路由器的定时重启。这个方法不仅简单高效,而且可以避免手动操作带来的麻烦。如果需要调整重启时间,只需修改crontab
中的设置即可。