在群晖NAS上,我们可以通过定时运行脚本来检查指定IP地址的连通性,以判断电源状态是否正常。如果电源状态异常,脚本会记录日志并执行关机操作。以下是一个完整的教程,帮助你在群晖NAS上设置和运行这个脚本。
1. 准备工作
1.1 创建脚本文件
-
创建脚本文件:
- 在群晖NAS上,创建一个目录来存放脚本文件。例如:
mkdir -p /volume1/docker/powercheck
- 创建脚本文件
power_check.sh
:touch /volume1/docker/powercheck/power_check.sh
- 在群晖NAS上,创建一个目录来存放脚本文件。例如:
-
编辑脚本文件:
- 使用你喜欢的编辑器(如
nano
或vi
)编辑脚本文件:nano /volume1/docker/powercheck/power_check.sh
- 使用你喜欢的编辑器(如
-
脚本内容:
- 将以下内容复制到脚本文件中:
#!/bin/sh MonitorIP=192.168.40.19 DelayTime=90s LogPath="/volume1/docker/powercheck/powerlog" CounterFile="/volume1/docker/powercheck/powercheck_count" MaxCount=10000
#确保日志文件和计数器文件存在
if [ ! -f "LogPath" ]; then touch "LogPath"
fiif [ ! -f "CounterFile" ]; then echo 0 > "CounterFile"
fi#读取当前计数
CurrentCount=(cat "CounterFile")#使用ping命令检查IP地址
if ping -c 2 -W 2 MonitorIP > /dev/null then #增加计数 NewCount=((CurrentCount + 1))
echo NewCount > "CounterFile"#如果计数小于MaxCount,记录日志 if [ $NewCount -le $MaxCount ]; then echo "$(date -d today +"%Y%m%d %H:%M:%S")-电源检查正常。" | tee -a "$LogPath" fi
else
#重置计数
echo 0 > "CounterFile" echo "(date -d today +"%Y%m%d %H:%M:%S")-需要再次检查电源状态。" | tee -a "LogPath" sleep DelayTimeif ping -c 2 -W 2 $MonitorIP > /dev/null then echo "$(date -d today +"%Y%m%d %H:%M:%S")-重新检查电源状态正常。" | tee -a "$LogPath" else echo "$(date -d today +"%Y%m%d %H:%M:%S")-再次检查后,电源丢失,准备关机。" | tee -a "$LogPath" poweroff fi
fi
exit 0
- 将以下内容复制到脚本文件中:
1.2 设置脚本权限
- 设置脚本文件的可执行权限:
chmod +x /volume1/docker/powercheck/power_check.sh
2. 测试脚本
2.1 手动运行脚本
-
运行脚本:
- 确保脚本文件具有可执行权限:
chmod +x /volume1/docker/powercheck/power_check.sh
- 运行脚本:
/volume1/docker/powercheck/power_check.sh
-
检查日志:
- 检查日志文件
/volume1/docker/powercheck/powerlog
,确认脚本是否按预期记录日志:cat /volume1/docker/powercheck/powerlog
2.2 验证日志内容
- 如果脚本运行正常,日志文件中应该包含类似以下内容:
20250603 10:49:28-电源检查正常。
- 如果第一次检查失败,日志会记录:
20250603 10:49:28-需要再次检查电源状态。
- 如果第二次检查成功,日志会记录:
20250603 10:50:58-重新检查电源状态正常。
- 如果第二次检查失败,日志会记录:
20250603 10:50:58-再次检查后,电源丢失,准备关机。
3. 设置定时任务
3.1 登录群晖管理界面
- 登录群晖管理界面:
- 打开浏览器,输入群晖NAS的IP地址,登录到群晖的管理界面。
3.2 进入任务计划程序
- 进入任务计划程序:
- 在管理界面的左侧菜单中,找到并点击**“控制面板”**。
- 在控制面板中,找到并点击**“任务计划程序”**。
3.3 创建新任务
-
创建新任务:
- 在任务计划程序页面,点击**“创建”按钮,选择“计划任务”,然后选择“用户定义的脚本”**。
-
设置任务名称和描述:
- 在弹出的窗口中,输入任务的名称和描述,例如:
- 任务名称:
Power Check
- 描述:
定时检查电源状态并记录日志
-
设置用户权限:
- 选择一个具有管理员权限的用户账户,例如
admin
。
-
设置脚本路径:
- 在**“脚本”部分,点击“浏览”**按钮,选择你的脚本文件(例如
/volume1/docker/powercheck/power_check.sh
)。
- 或者,直接在**“要运行的命令”**框中输入脚本的完整路径:
/volume1/docker/powercheck/power_check.sh
-
设置任务触发条件:
- 在**“计划”**部分,设置任务的触发条件。例如,如果你想每天凌晨2点运行脚本,可以设置如下:
- 重复周期:每天
- 开始时间:02:00
- 每天重复:每5分钟
-
保存任务:
- 点击**“确定”**按钮,保存任务设置。
4. 验证任务是否成功创建
4.1 检查任务计划程序
- 检查任务计划程序:
- 在任务计划程序页面,你会看到刚刚创建的任务。点击任务名称,可以查看任务的详细信息和运行日志。
4.2 手动运行任务
- 手动运行任务:
- 为了确保任务能够正常运行,可以手动运行一次任务:
- 在任务计划程序页面,找到你创建的任务,点击**“运行”**按钮。
- 检查日志文件
/volume1/docker/powercheck/powerlog
,确认脚本是否按预期执行。
5. 常见问题及解决方法
5.1 权限问题
- 如果运行脚本时出现
Permission denied
错误,确保脚本文件具有可执行权限:sudo chmod +x /volume1/docker/powercheck/power_check.sh
- 如果仍然出现权限问题,确保当前用户具有足够的权限来运行脚本。
5.2 ping
命令权限问题
- 如果运行
ping
命令时出现 ping: socket: Operation not permitted
错误,确保当前用户具有足够的权限来运行 ping
命令:sudo visudo
- 在
sudoers
文件中,添加以下行:admin ALL=(ALL) NOPASSWD: /bin/ping, /sbin/poweroff
5.3 日志文件路径问题
- 确保日志文件路径
/volume1/docker/powercheck/
存在,并且具有写入权限:mkdir -p /volume1/docker/powercheck
chmod 755 /volume1/docker/powercheck
chmod 644 /volume1/docker/powercheck/powerlog
chmod 644 /volume1/docker/powercheck/powercheck_count
6. 总结
- 通过以上步骤,你可以在群晖NAS上定时运行脚本,检查电源状态并记录日志。如果遇到问题,可以参考常见问题及解决方法部分。希望这个教程对你有所帮助!
- 如果你有任何问题或建议,请随时在评论区留言。
7. 补充
- 当成功关机后,可以配合群晖的“计划任务”模拟自动开机:
登录DSM → 控制面板 → 硬件和电源 → 计划开机。
勾选“启用计划开机”,并设置:
例如:每天 00:00 开机(如果此时有电,就会启动)。