断电后,无人值守,需要在供电恢复时,自动唤醒主机。Ubnt EdgeRouter X 固件支持自启动脚本。
打开路由器的 SSH 服务,登陆到后台 Console,根目录下的 config 目录,是用户配置文件,即使固件升级,也不会被清除。
再进入目录 /config/scripts/post-config.d,这个 post-config.d 顾名思义应该是指 “系统已经加载了配置文件” 的意思。
1、在这个目录下,创建脚本文件,文件名是数字+字母,数字代表执行优先级,如 9900wol-srv,输入代码:
#!/bin/sh
# wake up app server
# send to all interfaces to prevent the network interface was replaced
for (( i = 1; i <= 4; i++ )); do
/usr/sbin/etherwake aa:bb:cc:dd:ee:ff -i eth$i
done
echo "[$(date '+%Y-%m-%d %H:%M:%S')] wake up signal was send to app server." > /var/log/wol_srv.log
# wait for another router to be ready
sleep 1s
# wake up NAS through another router
for (( i = 1; i <= 4; i++ )); do
ssh -i /home/mos/.ssh/id_rsa -p9922 mos@10.8.8.199 "/usr/sbin/ether-wake -i eth$i aa:bb:cc:dd:ee:ff"
done
这款路由器有 4 个 LAN 接口,为了防止后期使用中,插拔网络时,接入了其它网口,因此索性向所有网口都发送了魔术包。因为指定了主机网卡的 MAC 地址,发送到其它网口,也不会对其它主机造成影响。
同时,也可以其它任务,如执行远程命令。这里是向另一台接了 NAS 的路由器发送了网络唤醒指令。
为了避免执行 ssh host command 时要求输入密码,可以使用命令 ssh-copy-id 提前复制登录证书到远程主机。详细可以参考:How to Use the ssh-copy-id Command (linuxhint.com)
2、修改文件属性,添加可执行选项
chmod a+x 9900wol-srv
3、重启路由器即可自动执行。