找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 7874|回复: 9

群晖之屌丝关机

[复制链接]
发表于 2020-7-30 21:35 | 显示全部楼层 |阅读模式
低端UPS没有通讯接口,网上刨到的Ping其他设备关机,比较适用。经如下改进,测试可用。测试环境: 群晖 216Play, DSM版本:6.2.3

1、Ping :改Ping设备名:
      A、被测设备无需设置固定IP,适用性广;
      B、可ping智能家居,如:智能插座、燃气热水器、电视机、机顶盒……
           注意:少数设备,如荣耀智慧屏,Ping设备名称失败,只能Ping IP。
      C、使用同一供电线路的2个设备做判断,提高可靠性。

      监测关键字为Ping 命令返回语句中的 “bytes from",可根据实际修改。
      不使用TTL做关键字原因:部分设备返回225,部分设备返回 64.
      不使用 ms 做关键字原因:有网友发文,其ping不通时仍有ms 返回。

2、日志:
     A、使用日志,不影响磁盘休眠;
     B、开机时,NAS上备份的日志文件拷入群晖 /tmp/ups文件夹,并追加日志;断电关机时自动回写NAS;
     C、开机时,NAS上备份的日志文件大于100KB时,将被清空内容。
     手动关闭NAS,日志文件不会回写。可自行增加关机前的任务计划。

3、关机时间:设备1检测时间 (1~ x分钟) + 设备2的检测间隔 150秒 + Shutdown 关机延迟 1分钟。

设置简单:添加2个计划任务:1、开机写代码计划(代码见2楼);2、定时Ping计划。
Linux小白网上思考所得,不足之处欢迎指正,谢谢。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
 楼主| 发表于 2020-7-30 21:35 | 显示全部楼层
cd /tmp/ups # 切换目录到 /tmp/ups

tee netcheck.sh <<-'EOF'
#!/bin/env bash
#MonitorIP=192.168.1.2
Monitor1=BRN3C2AXXXXXXX
Monitor2=uplus-haier-1814-XXXXX

DelayTime=150s
if ping $Monitor1 -W 2 -w 2 -c 2 | grep ' bytes from ' > /dev/null
   then
        echo "$(date -d today +"%Y-%m-%d %H:%M:%S"):连接打印机正常。" | tee -a  /tmp/ups/PowerLog.txt
   else
       echo "$(date -d today +"%Y-%m-%d %H:%M:%S"):连接打印机失败,稍候测试燃气热水器 。。。" | tee -a  /tmp/ups/PowerLog.txt
       sleep $DelayTime
       if ping $Monitor2 -W 2 -w 2 -c 2 | grep ' bytes from ' > /dev/null
          then            
             echo "$(date -d today +"%Y-%m-%d %H:%M:%S"):连接燃气热水器成功,退出复检。" | tee -a  /tmp/ups/PowerLog.txt
          else
              echo "$(date -d today +"%Y-%m-%d%H:%M:%S"):连接2个设备均失败,NAS 1分钟后关机。" | tee -a  /tmp/ups/PowerLog.txt
              cp -f /tmp/ups/PowerLog.txt /volume1/Software/PowerLog.txt
             shutdown -P +1     
      fi
fi
exit 0
EOF

find /volume1/Software/ -iname PowerLog.txt -size +100k -exec ture > /volume1/Software/PowerLog.txt \;
sleep 2s           #日志文件超过100K时,清空内容。
cp -f /volume1/Software/PowerLog.txt /tmp/ups/PowerLog.txt
chmod 666 /tmp/ups/PowerLog.txt
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2020-7-30 21:42 | 显示全部楼层
代码中的 Monitor1、Monitor2 必须修改为自用设备名称或者固定IP;日志文字内容自行修改。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2020-8-7 22:37 | 显示全部楼层
本帖最后由 ETan 于 2020-8-11 12:54 编辑

从张大妈过来的,思考了。能用就行。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2020-8-10 14:07 | 显示全部楼层
@ETan 感谢回复。
关键字我觉得不重要,你临时开启路由器telnet,看ping指令返回的结果,根据自己的实际选才是最合理的。
说实话, 我不理解你的意思。按我个人的理解,UPS上一定是接着NAS的,买UPS主要就是为了数据,我的光猫和路由器,也同时接到了UPS上。因此,NAS Ping自己或者路由器,就等于无用功。需要Ping市电断电就Ping不通的设备,才有用。
如果路由器挂市电,那你直接Ping路由器也可以。路由器断电,后面接的设备,并不会立即改变IP,所以Ping NAS自己的IP也没有意义。
我觉得固定IP不如用设备名,万一复位路由器或者NAS,IP就变了,然后自动关机了,麻烦。设备名,基本不会变,路由器里看连接了哪些设备,就可以看到。这也是网上已经有了很多的代码,我还发这个贴的原因之一。
Ping设备名、Ping 2台不同的设备、写日志不影响磁盘休眠、控制日志大小,才是这个帖子存在的价值。

还需要改进的,就是NAS检测到设备1掉线、设备2也掉线,发不同声响警报。这个代码我还不会。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2020-8-10 14:17 | 显示全部楼层
求:群晖发声、发邮件、发短信报警代码,谢谢。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2020-8-11 13:24 | 显示全部楼层
本帖最后由 ETan 于 2020-8-15 18:07 编辑

1,说实话, 我不理解你的意思。
2,路由器断电,后面接的设备,并不会立即改变IP,所以Ping NAS自己的IP也没有意义。


答:1,新建脚本:nas查看网卡ip,如果{******,结束脚本}
                                                   如果{*****,三分钟后再**********,关机}
           以上脚本设置开机运行计******钟运行一次

答:2,找台电脑测试,设置静态ip,拔掉网线,ipconfig/all,ip为空
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2022-4-29 00:05 | 显示全部楼层
感谢大佬分享,不过网上搜出来的脚本和你这有点差异,我好奇他们在判断ping不通后 执行这个代码synologset1 sys warn 0x11600035、36、37是干嘛用的?

点评

群辉升级7.0后,以上代码失效了。不过,我在AI的帮助下,成功实现了在Openwrt中,对群辉开关机进行操作: 安装sshpass插件,替换以下代码中的 账户、密码、ip 等信息: 1、openwrt 操作群晖关机: sshpass -p '群晖  详情 回复 发表于 2026-3-29 22:55
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2026-3-29 22:55 | 显示全部楼层
本帖最后由 clotus 于 2026-3-29 23:20 编辑
Amings 发表于 2022-4-29 00:05
感谢大佬分享,不过网上搜出来的脚本和你这有点差异,我好奇他们在判断ping不通后 执行这个代码synologset1 ...

群辉升级7.0后,以上代码失效了。不过,我在AI的帮助下,成功实现了在Openwrt中,对群辉开关机进行操作:
安装sshpass插件,替换以下代码中的 账户、密码、ip 等信息:
代码1、openwrt 操作群晖关机:
sshpass -p '群晖密码' ssh -p 端口号 -y 群晖用户名@IP地址 "echo '群晖密码' | sudo -S /sbin/poweroff"
------------------------------------------------------------------------------------------------------------------------------------------------
代码2、openwrt操作群辉开机(把XX改为实际MAC):
etherwake -i br-lan 00:11:XX:XX:XX:XX
------------------------------------------------------------------------------------------------------------------------------------------------
代码3、Openwrt 市电检测脚本:
#!/bin/sh
# ================= 配置区 =================
MONITOR1="192.168.1.XXX"  # Haier 热水器的 IP
MONITOR2="192.168.1.YYY"  # Yeelink 设备的 IP
DELAY=150                 # 等待复测的时间 (秒)
# ==========================================
# 1. 测第一哨兵,如果通了,脚本无声退出
if ping -c 2 -W 2 "$MONITOR1" >/dev/null 2>&1; then
    exit 0
fi
# 2. 没通,静默等待
sleep $DELAY
# 3. 测第二哨兵,如果通了,无声退出
if ping -c 2 -W 2 "$MONITOR2" >/dev/null 2>&1; then
    exit 0
fi
# 4. 全挂了,无声发射关机指令
sshpass -p '群晖密码' ssh -p 端口号 -y 群晖用户名@群晖IP地址 "echo '群晖密码' | sudo -S /sbin/poweroff"
exit 0
------------------------------------------------------------------------------------------------------------------------------------------------
代码4、openwrt定时任务(每隔5分钟运行一次,记得修改ups_check.sh权限 0755):
*/5 * * * * /root/ups_check.sh
------------------------------------------------------------------------------------------------------------------------------------------------
代码5、 可以在openwrt中,安装luci-app-commands插件,该插件在“系统”选项卡生成一个“自定义命令”页面,该页面允许您配置自定义 Shell 命令,并可以从 Web 界面调用。
      在配置区添加“打开群晖”、“关闭群辉”等 commands命令后,可以在登录网页openwrt后,执行设置的各种commands命令。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2026-3-29 23:14 | 显示全部楼层
本帖最后由 clotus 于 2026-3-29 23:27 编辑

可以在“# 1. 测第一哨兵,如果通了,脚本无声退出” 之前,添加群晖开机检测:

# 【新增:前提探测】
# 尝试 Ping 一下 NAS,如果 Ping 不通(说明 NAS 本来就是关着的)
if ! ping -c 1 -W 2 "$NAS_IP" >/dev/null 2>&1; then
    # NAS 没开机,脚本直接退出,不进行后续的市电检测
    exit 0
fi

---------------------------------------------------------------------------------------------
至于openwrt重启光猫,也可以实现,不过光猫不同,代码不同,相对比较复杂,要具体调试。

对于openwrt关闭windows电脑的代码:
net rpc shutdown -f -t 0 -C "来自 OpenWrt 的关机指令" -I 电脑IP -U windows用户名%windows密码



只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /2 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2026-8-23 16:51

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 电话:13506125623

快速回复 返回顶部 返回列表