起初
- 本着废物利用的目的,把移动的电视盒子刷成了Armbian,然后在上面挂Alist。但我也是终究没有弄到公网IP,也就只能通过内网穿透来解决这个问题。
电视盒子配置
- 型号:MGV2000 JZ(九州)
- 处理器型号:s905l-b
- 不确定,因为有部分人说是s905l2,但我之前看固件应该是s905-b(没错,-b指的就是有杜比)。
- 但我刷armbian的时候刷的是s905l2的uboot,除了网络之外一切正常(没错,就是没网,包括有线,无线与蓝牙。我还因此买了个RJ45转USB-A来保证连接)。
- 然而刷入s905l或者s905lb的dtb会无法启动。
- 这部分有待更新(等有时间把散热片拿开看一眼)。
无人监管的初步_定时重启
- 刚开始因为电视盒子所处环境的网络可能会周期性断开,所以我设置了每天0点自动重启。一开始还好,基本都能挂上,但越后面重启时间越久。刚开始以为是网络问题,重启一次可能不过,于是乎设置了每日两次重启。然而掉线的现象更加严重。
- 在一次排查中发现,电视盒子在重启之后有一定几率会重启失败,系统就卡在那,包括HDMI输出都没。
定时重启设置
创建一个新的服务
在
/etc/systemd/system/
目录创建一个服务,名字随便命名,这里为reboot
1
sudo vim /etc/systemd/system/reboot.service
输入以下内容
1
2
3
4
5
6
7
8
9[Unit]
Description=Reboot Service
[Service]
Type=oneshot
ExecStart=/sbin/reboot
[Install]
WantedBy=multi-user.target
设置一个新的定时器
在与刚刚创建的
reboot.service
的同级目录创建一个定时器,随便命名,这里同样为reboot
。1
sudo vim /etc/systemd/system/reboot.timer
输入以下内容并保存。(每天的2:30重启)
1
2
3
4
5
6
7
8[Unit]
Description=Reboot Timer
[Timer]
OnCalendar=*-*-* 02:30:00
[Install]
WantedBy=timers.target启动定时器
1
sudo systemctl enable --now reboot.timer
查看时间表,如果不出意外的话会看到一个名为
reboot.timer
的服务会在02:30:00
执行,然后截止日期为n/a
。1
sudo systemctl list-timers
无人监管的进阶_看门狗
- 因为重启可能导致的问题,我放弃了所有定时重启的选项,转而选择看门狗重启FRP服务。
- 用看门狗进行无人监管的原理其实很简单,就是通过定时对内网穿透出来的地址做访问,成功就不管,失败就调用FRP自带的重启。
看门狗设置
安装看门狗和netcat
1 | sudo apt install watchdog netcat-openbsd |
编辑检测FRP状态的脚本
在
/usr/local/bin
目录下创建一个名为check_frp.sh
的文件。1
vim /usr/local/bin/check_frp.sh
写入以下内容并保存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#!/bin/bash
# FRP服务器的域名与端口号
FRP_SERVER="your.frp.server"
FRP_PORT="7000"
# 写入的日志文件路径
LOG_FILE="/var/log/frp_watchdog.log"
# 清理日志文件,保留最近3天的日志
find $(dirname "$LOG_FILE") -name "$(basename "$LOG_FILE")" -type f -mtime +3 -exec rm {} \;
# 记录脚本运行的时间
echo "$(date): Running FRP watchdog script." >> $LOG_FILE
# 检查FRP的连接
if ! nc -zv $FRP_SERVER $FRP_PORT 2>&1 | grep -q 'succeeded'; then
echo "$(date): FRP cannot connect to $FRP_SERVER:$FRP_PORT" >> $LOG_FILE
# 重启FRP服务,注意修改配置文件路径
pkill frpc
/usr/local/bin/frpc -c /usr/local/bin/frpc.ini
echo "$(date): FRP service restarted." >> $LOG_FILE
# exit 1 # 返回非零值以通知watchdog
else
echo "$(date): FRP is running and connected to the server." >> $LOG_FILE
fi
赋予脚本执行权限
1 | sudo chmod +x /usr/local/bin/check_frp.sh |
配置看门狗调用脚本
编辑看门狗的配置文件
1
sudo vim /etc/watchdog.conf
输入以下内容(文件本身有内容不用管,直接在最上面写入就是了。)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# Enable the watchdog daemon
watchdog-device = /dev/watchdog
# Interval between checks in seconds
interval = 10
# Max load average before watchdog triggers
max-load-1 = 24
# Watchdog will reboot system if load average remains high for this many seconds
watchdog-timeout = 30
# Run the custom script to check FRP status
test-binary = /usr/local/bin/check_frp.sh
# Exit watchdog if the test-binary returns 1, to trigger restart attempts
# test-binary-exit-1 = yes启动看门狗并给予自启权限。
1
2
3sudo systemctl start watchdog
sudo systemctl enable watchdog查看看门狗状态
1
sudo systemctl status watchdog
不出意外的话,如果断开FRP连接就会在指定目录生成日志文件。然后重启FRP服务。
参考文章
- Linux设置定时重启
- ChatGPT