Memo
步骤 1:创建 Bash 脚本
搞了个定时脚本来解决 PVE 下 OpenWRT 意外卡死的问题。 这个 OpenWRT 容器作为网络中的唯一主路由,所以用最简单的方法就是直接在宿主机上检查网络联通性来推测 OpenWRT 是不是寄了。 定时任务使用了 systemed timer 来实现,感觉确实不错 -(Systemd 定时器教程 - 阮一峰的网络日志 - pct(1) 步骤 1:创建 Bash 脚本 1. 创建脚本文件...
搞了个定时脚本来解决 PVE 下 OpenWRT 意外卡死的问题。
这个 OpenWRT 容器作为网络中的唯一主路由,所以用最简单的方法就是直接在宿主机上检查网络联通性来推测 OpenWRT 是不是寄了。
定时任务使用了 systemed timer 来实现,感觉确实不错
步骤 1:创建 Bash 脚本
- 创建脚本文件
/usr/local/bin/restart_openwrt_when_error.sh:
sudo nano /usr/local/bin/restart_openwrt_when_error.sh
- 将以下内容粘贴到脚本文件中:
#!/bin/bash
if [ -z "$1" ]; then
echo -e "\e[31mUsage: $0 <LXC_ID>\e[0m" >&2
exit 1
fi
LXC_ID=$1
RETRY_COUNT=3
RETRY_INTERVAL=5
fail_count=0
echo -e "\e[34mStarting network accessibility check for https://qq.com and https://baidu.com...\e[0m"
for ((i=1; i<=RETRY_COUNT; i++)); do
if curl -s --head --connect-timeout 10 https://qq.com/ > /dev/null || curl -s --head --connect-timeout 10 https://baidu.com/ > /dev/null; then
echo -e "\e[32mNetwork is accessible.\e[0m"
fail_count=0
break
else
-
保存文件并退出编辑器。
-
赋予脚本执行权限:
sudo chmod +x /usr/local/bin/restart_openwrt_when_error.sh
步骤 2:创建 Systemd 服务文件
- 创建服务文件
/etc/systemd/system/restart_openwrt_when_error.service:
sudo nano /etc/systemd/system/restart_openwrt_when_error.service
- 添加以下内容:
[Unit]
Description=Check network access and restart OpenWRT LXC if unreachable
[Service]
Type=oneshot
ExecStart=/usr/local/bin/restart_openwrt_when_error.sh 305
TimeoutStartSec=5min
将 <LXC_ID> 替换为实际的 LXC 容器 ID。
- 保存文件并退出编辑器。
步骤 3:创建 Systemd 定时器文件
- 创建定时器文件
/etc/systemd/system/restart_openwrt_when_error.timer:
sudo nano /etc/systemd/system/restart_openwrt_when_error.timer
- 添加以下内容:
[Unit]
Description=Run restart_openwrt_when_error.service every 10 minutes
[Timer]
OnBootSec=3min
OnUnitActiveSec=10min
AccuracySec=1s
Persistent=false
[Install]
WantedBy=timers.target
- 保存文件并退出编辑器。
步骤 4:启用并启动服务和定时器
- 重新加载 Systemd 配置:
sudo systemctl daemon-reload
- 启用并启动定时器:
sudo systemctl enable restart_openwrt_when_error.timer
sudo systemctl start restart_openwrt_when_error.timer
- 检查定时器状态,以确保其正常运行:
sudo systemctl status restart_openwrt_when_error.timer
步骤 5:查看日志
- 使用
journalctl查看服务的日志输出,包括脚本的输出:
journalctl -u restart_openwrt_when_error.service