博主已有一台 x86 的电脑和一台 ARM 的机顶盒,机顶盒已装好 Armbian,不接 UPS;电脑装了 ArchLinux 且开启了 WOL,接UPS。于是就可以写个脚本,让电脑在发现了机顶盒不在线(即断电)的一定时间后自动关机;当电脑关机且来电后,机顶盒开机,然后通过 WOL 唤醒电脑。
2024.02.09 经过十多天的测试发现,开启 WOL 后似乎会造成电脑没法完全关机,受限于个人能力和精力,只好放弃 WOL,转用 USB 串口继电器。。。 继电器连接着电脑的开关机线,然后机顶盒控制 USB 串口继电器吸合/断开,以此来操控电脑的开关机,详情请看图片&脚本:
[{"url":"https://pic-lrc-bed.haf208.cc/img/extra/nas-auto-shutdown/01.webp","alt":"10.2RMB 的 USB 串口继电器模块","title":""},{"url":"https://pic-lrc-bed.haf208.cc/img/extra/nas-auto-shutdown/02.webp","alt":"模块控制参数","title":""},{"url":"https://pic-lrc-bed.haf208.cc/img/extra/nas-auto-shutdown/03.webp","alt":"USB 串口继电器模块","title":""}]
# systemd: /etc/systemd/system/wakeup-server.service [Unit] Description=Wake up server Wants=network-online.target After=network-online.target nss-lookup.target
functionget_status() { curl -A 'Manjaro' -s -m 1 $server }
functionmain_func() { if [[ `get_status` == "status-ok" ]]; then retry_count=0 else shutdown 10 echo"[`date_time`] If power not resume in 10 mintunes, server will shutdown!" >> $log_file
# Retry whiletrue do if [[ `get_status` != "status-ok" ]]; then retry_count=`expr$retry_count + 1` if [[ retry_count -gt 25 ]]; then poweroff && sleep 2 && break; fi# 感觉没啥作用,但为了保险还是加了这一行 echo"[`date_time`] Power maybe off, retrying...($retry_count)" >> $log_file sleep 30 else shutdown -c echo"[`date_time`] Power resumed to OK! Shutdown Canceled." >> $log_file retry_count=0 break; fi done fi }
ps -aux > .pstmp if [[ `cat .pstmp | grep -c http_shutdown.sh` -gt 1 ]]; then rm -f .pstmp echo"Another one is running, exit." exit fi rm -f .pstmp