首先用root权限,查看系统日志,cat /var/log/messages,发现有这么一条日志:
2020-03-06T23:04:31+08:00 bkynas synoups: [UPS] Check Boot Status.
2020-03-06T23:04:31+08:00 bkynas synoups: [UPS] Server is going to Safe Mode. It will stop all services and umount all volumes.
这是断电后,系统进入安全模式关闭服务卸载卷的日志。
那么可以确定这个地方就是断电后,系统执行执行命令的地方,只不过是进入安全模式而不是关机。
我们可以看到日志是由synoups这个程序输出的。顺藤摸瓜,找到synoups这个程序,目录是/usr/syno/bin/synoups,直接cat一下,发现synoups不是二进制执行程序,而是一个Linux脚本。
好的,打开它vi /usr/syno/bin/synoups(vi 及vim知识这里不讲了)
搜索一下日志关键字Server is going to Safe Mode,果然找到了
这里我们发现,第142行输出了我们上面查询到的日志,第148-150行执行了进入安全模式的命令。
解决办法很简单,先把文件备份一份,然后把148-150行注释掉,直接增加一行poweroff关机命令。
1 2 3 4 5 6 7 8 9 10 11 12 |
SYSLOG "[UPS] Server is going to Safe Mode. It will stop all services and umount all volumes." if [ "yes" = "$RUN_HA" ]; then $SZF_HA_RC ups-safemode fi # $SYNOBOOTBIN --set-safe-shutdown (就是这里这三行决定了进入安全模式,可以重启NAS。在这三行前面加上#号他们就变成不执行了再加入命令) # we should hook synopoweroff not only reboot # /usr/syno/sbin/synopoweroff -fr poweroff |
保存这个文件。
这时候断掉市电,30秒后,群晖自动关机,而不是进入安全模式在硬盘还在转的情况下被UPS直接断电。
当然这个方案还有一个小问题,那就是群晖自动关机了,UPS还是开的。不过这都不是问题,毕竟数据最珍贵!