文章目录
- 配置
- 文件说明
- 默认配置(翻译的)
- ups.conf(设置ups通信相关)
- upsd.conf(设置ups客户访问的相关信息)
- upsd.users(设置upsd用户)
- nut.conf(nut的配置,主要是模式,决定使用哪些文件)
- upsmon.conf
- upssched.conf
- upssched-cmd
- 官方手册
- 写的可以的文章
只需要实现,断电后,PVE关闭所有的虚拟机,低电量关闭PVE,如果PVE还没有关闭,来电了,则打开所有虚拟机
配置
-
安装必要工具
sudoapt install nut nut-client nut-server
-
扫描查看ups信息
ups-scanner -U
-
将配置放在
ups.conf
中,注意名字改为ups(为了群晖能够连接上)
-
启动驱动程序
upsdrvctl start
- 设置监听,修改
upsd.conf
文件,最后一行添加LISTEN 0.0.0.0 3493
- 修改
nut.conf
模式,让upsd服务决定哪些文件有用,因为我们让pve作为服务器,因此为netserver
模式
- 启动
upsd
服务
输入upsd
- 测试一下连接,使用
upsc ups@localhost ups.status
- 这个时候,通过群晖访问应该是没有问题的。
- 设置相关事件的处理,总的来说首先是upsmon->upssched->upssched-cmd
注意设置upssched的路径,NOTIFYMSG这些有默认的内容,我们可以重写,自定义修改,然后就是注意后面要upssched-cmd执行的话,一定要填写EXEC在事件后面!
#这个很重要
RUN_AS_USER root
MONITOR ups@localhost 1 monuser secret master
#这里可以自定义内容
NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery "
NOTIFYMSG LOWBATT "UPS %s battery is low"
#这个也很重要,首先upsmon->upssched->upssched-cmd
#注意路径
#[参考文章](https://networkupstools.org/docs/user-manual.chunked/ar01s07.html)
#upssched 是 upsmon 的助手,它将在与 UPS 事件相关的某个时间间隔为您调用命令。它可用于发送页面、邮寄有关事物的通知,甚至提前关闭盒>子。
NOTIFYCMD /usr/sbin/upssched
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
- 然后编写配置文件
upssched.conf
CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock
# 断电使用电池开始计时30秒,计时后,执行upssched-cmd脚本,带shutdown_all参数
AT ONBATT * START-TIMER shutdown_all 30
# 来电后,停止shutdown_all计时
AT ONLINE * CANCEL-TIMER shutdown_all
# 来电后,执行脚本,带start_all参数
AT ONLINE * EXECUTE start_all
# 低电量,执行脚本,带shutdown_self参数
AT LOWBATT * EXECUTE shutdown_self
- 然后编写脚本(要有执行权限)
upssched-cmd
, 这里就是具体执行的地方
#! /bin/sh
case $1 in
shutdown_self)
#关闭所有
upsmon -c fsd
;;
shutdown_all)
pvesh create /nodes/pve/qemu/100/status/stop
pvesh create /nodes/pve/qemu/101/status/stop
pvesh create /nodes/pve/qemu/102/status/stop
;;
start_all)
#开启所有
pvesh create /nodes/pve/qemu/100/status/start
pvesh create /nodes/pve/qemu/101/status/start
pvesh create /nodes/pve/qemu/102/status/start
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac
- 重启所有服务
systemctl restart nut-client.service nut-server.service nut-monitor.service; \
upsdrvctl stop; \
sleep 1; \
upsdrvctl start;
注意,什么时候是低电量,可以配置只需要修改ups.conf
即可
注意ignorable
文件说明
ups.conf
:这个文件是用于ups的驱动配置(每个ups都需要设置),这里可以覆盖默认的一些配置
nut.conf
:该文件是nut决定服务类型的文件,很重要,你是作为服务器?还是客户端还是独立端之类的
upsd.conf
:该文件设置监听或者访问之类的
upsd.users
:该文件设置 upsd(UPS 网络守护程序)的权限。用户在这里定义,被赋予密码,他们的权限也在这里被控制。 由于此文件将包含密码,因此请确保它的安全,只有足够的权限让 upsd 读取它。
upsmon.conf
:ups monitor程序,就是监控程序,这里设置监控ups事件、通知等,是最重要的文件,它决定了如何处理。
upssched.conf
:在upsmon中设置通知执行的程序upssched后,它就会得到使用,主要是方便用户在这里设置定时器以及脚本输入参数,来处理事件
upssched-cmd
:该文件在upssched.conf中设置,定时结束或者直接执行的话,就会调用该脚本,其中第一个参数就是设定的事件,一般用case语句来处理(这里就是最终执行的脚本)
默认配置(翻译的)
ups.conf(设置ups通信相关)
# Network UPS Tools: example ups.conf
#
# --- 安全说明 ---
#
# 如果您使用 snmp-ups 并在此处设置社区字符串
# 则必须保护此文件以防止其他用户获取该字符串
# 它需要 upsdrvctl 和任何驱动程序以及 upsd 可读。
#
# 这是您配置该系统将直接监控的所有 UPS 的地方。
# 这些通常连接到串行端口,但也支持 USB 设备和 SNMP 设备
#
#
# upsdrvctl 使用此文件来启动和停止您的驱动程序,
# upsd 也使用此文件来确定要监视的驱动程序。
# 驱动程序本身也会读取此文件以获取配置指令。#
#
#
# The general form is:
#
# [upsname]
# driver = <drivername>
# port = <portname>
# < any other directives here >
#
# 节标题 ([upsname]) 可以是任何内容,
# 只要它是括号内的单个单词即可。
# upsd 使用它来唯一标识此系统上的 UPS。#
#
#
#
# 如果您有一个名为 snoopy 的 UPS,
# 您的部分标题将是“[snoopy]”。
# 在名为“doghouse”的系统上,upsmon.conf 中用于监视它的行看起来像这样:
#
#
# MONITOR snoopy@doghouse 1 upsmonuser mypassword master
#
# 如果在slave模式下监控可能是这样的:
#
# MONITOR snoopy@doghouse 1 upsmonuser mypassword slave
#
# 配置指令
# ------------------------
#
# 这些指令仅由 upsdrvctl 使用,应在驱动程序定义之外指定:#
#
# maxretry:
# 可选的。 指定在失败的情况下在放弃之前尝试启动驱动程序的次数。
# 在每次尝试之间插入“retrydelay”延迟。 使用此选项时应小心,因为它会影响系统启动所需的时间。
# 默认值为 1 次尝试。
#
# retrydelay:
# 可选的。 指定驱动程序每次重新启动尝试之间的延迟,
# 由“maxretry”指定。 使用此选项时应小心,因为它会影响系统启动所需的时间。
# 默认值为 5 秒。
#
# 这些指令对于支持 ups.conf 的所有驱动程序都是通用的:
#
# driver:
# 必需的。 指定要运行的程序以与此 UPS 通信。 apcsmart、bestups 和 sec 就是一些例子。
#
# port:
# 必需的。 连接 UPS 的串行端口。 例如,/dev/ttyS0 通常是 Linux 机器上的第一个端口。
#
# sdorder:
# 选修的。 当您的系统上有多个 UPS 时,您通常需要按特定顺序关闭它们。
# upsdrvctl 关闭所有 0,然后是 1、2 等等。 要从关闭序列中排除 UPS,请将其设置为 -1。 #
# 此参数的默认值为 0。
#
# nolock:
# 可选的, 并且不推荐在此文件中使用。如果在这里设置nolock,则驱动程序每次启动时都不会锁定串口。
# 如果您错误地启动多个进程,这可能会允许其他进程占用端口。
# 这仅适用于必须绝对禁用锁定才能使软件工作的系统。
#
# maxstartdelay:
# 可选的。这可以设置为第一个 UPS 定义之上的全局变量,也可以在 UPS 部分中设置。
# 该值控制#upsdrvctl 等待驱动程序完成启动的时间。 这可以防止您的系统因驱动器或 UPS 损坏而卡住。
# 默认值为 45 秒。
#
# synchronous:
# 可选的。 驱动程序默认在异步模式下工作(即 *synchronous=no*)。
# 这意味着所有数据都由驱动程序在通信套接字上推送到 upsd(Unix 上的 Unix 套接字,
# Windows 上的命名管道),而无需等待这些数据被实际消费。
# 对于一些可以产生大量数据的硬件,例如 ePDU,异步模式可能会导致一些拥塞,导致套接字已满,驱动程序显示为未连接。
# 通过启用“同步”标志(值 =“是”),驱动程序将等待数据被 upsd 使用,然后再发布更多数据。
# 这可以全局或每个驱动程序启用。
# 默认为“否”(即异步模式)以实现驱动程序行为的向后兼容性。
#
# 任何其他内容都传递给驱动程序的硬件特定部分。
#
# Examples
# --------
#
# 一个名为“powerpal”的 UPS 在 /dev/ttyS0 上使用 blazer_ser 驱动程序的简单示例是:
#
# [powerpal]
# driver = blazer_ser
# port = /dev/ttyS0
# desc = "Web server"
#
# 如果您的 UPS 驱动需要额外设置,您可以在此处指定。 例如,如果它支持变量“cable”的设置为“1234”,它将如下所示:
# [myups]
# driver = mydriver
# port = /dev/ttyS1
# cable = 1234
# desc = "Something descriptive"
#
# 要查明您的驱动程序是否支持任何额外设置,请使用 -h 选项启动它和/或阅读驱动程序的文档。
# Set maxretry to 3 by default, this should mitigate race with slow devices:
maxretry = 3
upsd.conf(设置ups客户访问的相关信息)
# Network UPS Tools: example upsd configuration file
#
# 此文件包含访问控制数据,您应妥善保管。
#
# 只有 upsd 成为的用户才能读取它。 请参阅常见问题解答。
#
# 下面的每个条目都提供了用法和默认值。
# =======================================================================
# MAXAGE <seconds>
# MAXAGE 15
#
# 默认为 15 秒。 在 UPS 驱动停止更新数据这么多秒后,upsd 将其标记为陈旧并停止向客户提供该信息。
# 毕竟,唯一比没有数据更糟糕的是坏数据。
# 如果您的驱动程序难以在正常的 15 秒间隔内保持数据新鲜,您应该只使用它。
# 观察系统日志,了解来自 upsd 的关于过时的通知。
# =======================================================================
# STATEPATH <path>
# STATEPATH /var/run/nut
#
# 告诉 upsd 在“路径”中查找驱动程序状态套接字,而不是编译到程序中的默认值。
# =======================================================================
# LISTEN <address> [<port>]
# LISTEN 127.0.0.1 3493
# LISTEN ::1 3493
#
# 这默认为本地主机侦听地址和端口 3493。
# 在禁用 IP v4 或 v6 内核的情况下,将仅使用可用的内核。
#
# 您可以指定希望 upsd 侦听连接的每个接口,
# 可选地带有端口号。
#
# 如果您的机器上有多个接口并且您不希望 upsd 监听所有接口
# (例如在防火墙上,您可能不想监听外部接口),您可能需要这个。
#
# 这只会在 upsd 启动时读取。 如果在此处进行更改,则需要重新启动 upsd,重新加载将无效。
# =======================================================================
# MAXCONN <connections>
# MAXCONN 1024
#
# 这默认为系统允许的最大数量。 每个 UPS、每个 LISTEN 地址和每个客户端都算作一个连接。
# 如果服务器用完连接,它将不再接受新的传入客户端连接。 仅当您确切知道自己在做什么时才设置此项。
# =======================================================================
# CERTFILE <certificate file>
# CERTFILE /usr/local/ups/etc/upsd.pem
#
# 当使用 OpenSSL 后端的 SSL 支持进行编译时,您可以在此处输入证书文件。
# 证书必须采用 PEM 格式,并且必须从主题的证书(服务器证书)开始排序,然后是中间 CA 证书
#(如果适用_和最高级别(根)CA。它应该以服务器密钥结尾。
# 请参阅“文档/ security.txt' 或 NUT 用户手册的安全章节,了解有关 NUT 中 SSL 支持的更多信息。
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
# =======================================================================
# CERTPATH <certificate file or directory>
# CERTPATH /usr/local/ups/etc/cert/upsd
#
# 当使用 NSS 后端的 SSL 支持编译时,您可以在此处输入证书路径。
# 证书存储在专用数据库中(分为 3 个文件)。
# 指定数据库目录的路径。
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
# =======================================================================
# CERTIDENT <certificate name> <database password>
# CERTIDENT "my nut server" "MyPasSw0rD"
#
# 当使用 NSS 后端的 SSL 支持进行编译时,您可以指定要从数据库中检索的证书名称以验证自身以及访问证书相关私钥所需的密码。
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
# =======================================================================
# CERTREQUEST <certificate request level>
# CERTREQUEST REQUIRE
#
# 当使用带有 NSS 后端和客户端证书验证的 SSL 支持编译时(默认情况下禁用,请参阅“docs/security.txt”),您可以指定 upsd 是否请求或需要客户端的证书。
# 可能的值是:
# - 0 不要求客户端提供任何证书
# - 1 要求所有客户提供证书
# - 2 要求所有客户提供有效证书
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
upsd.users(设置upsd用户)
# Network UPS Tools: Example upsd.users
#
# 此文件设置 upsd(UPS 网络守护程序)的权限。
# 用户在这里定义,被赋予密码,他们的权限也在这里被控制。
# 由于此文件将包含密码,因此请确保它的安全,只有足够的权限让 upsd 读取它。
# --------------------------------------------------------------------------
# 每个用户都有一个部分。 要开始一个部分,请将用户名单独放在一行的括号中。
# 要为该用户设置某些内容,请在该部分标题下指定它。 用户名区分大小写,因此 admin 和 AdMiN 是两个不同的用户。
#
# 可以设置的参数:
#
# password: 用户的密码。 这是区分大小写的。
#
# --------------------------------------------------------------------------
#
# actions: 让用户用 upsd 做某些事情。
#
# 有效的 actions 参数为:
#
# SET - 更改 UPS 中某些变量的值
# FSD - 在 UPS 中设置“强制关机”标志
#
# --------------------------------------------------------------------------
#
# instcmds:让用户启动特定的即时命令。 使用“ALL”自动授予所有命令。
# 有许多可能的命令,因此请使用“upscmd -l”查看您的硬件支持的命令。 这里有一些例子:
#
# test.panel.start - 开始前面板测试
# test.battery.start - 开始电池测试
# test.battery.stop - 停止电池测试
# calibrate.start - 开始校准
# calibrate.stop - 停止校准
#
# --------------------------------------------------------------------------
#
# Example:
#
# [admin]
# password = mypass
# actions = SET
# instcmds = ALL
#
# --- 为只能执行测试的用户配置
#
# [testuser]
# password = pass
# instcmds = test.battery.start
# instcmds = test.battery.stop
#
# --- 配置 upsmon
#
# 要为您的 upsmon 添加用户,请使用以下示例:
#
# [upsmon]
# password = pass
# upsmon master
# or
# upsmon slave
#
# upsmon.conf 中匹配的 MONITOR 行如下所示:
#
# MONITOR myups@localhost 1 upsmon pass master (or slave)
nut.conf(nut的配置,主要是模式,决定使用哪些文件)
# Network UPS Tools: example nut.conf
#
##############################################################################
# 一般部分
##############################################################################
# MODE决定了要启动NUT的哪一部分,以及必须修改哪些配置文件。
#
# 这个文件试图标准化在该领域发现的各种文件,比如基于 Debian 的系统上的 /etc/default/nut,
# 基于 RedHat 的系统上的 /etc/sysconfig/ups,...发行版的初始化脚本应该获取这个文件以查看哪个 必须启动组件。
#
# MODE 的值可以是:
# - none:
# NUT 未配置,或使用集成电源管理,或使用某些外部系统启动 NUT 组件。 所以没有什么可以开始的。
# - standalone:
# 此模式仅适用于本地配置,使用 1 个 UPS 保护本地系统。
# 这意味着启动 3 个 NUT 层(驱动程序、upsd 和 upsmon)和匹配的配置文件。
# 这种模式还可以解决 UPS 冗余问题。
# - netserver:
# 与独立配置相同,但还需要更多网络访问控制(防火墙、tcp-wrappers),
# 可能还需要 upsd.conf 中的特定 LISTEN 指令。由于此模式对网络开放,因此应特别注意安全性 担忧。
# - netclient:
# 这种模式只需要 upsmon。
#
# 重要的提示:
# 该文件旨在由 shell 脚本获取。 您不得在等号周围使用空格!
MODE=none
upsmon.conf
# Network UPS Tools: example upsmon configuration
#
# 此文件包含密码,因此请妥善保管。
# --------------------------------------------------------------------------
# RUN_AS_USER <userid>
#
# 默认情况下,upsmon 分为两个进程。
# 一个保持 root 身份并等待运行 SHUTDOWNCMD。
# 另一个切换到另一个用户标识并执行其他所有操作。
#
# 默认的非特权用户在编译时设置为
# 'configure --with-user=...'.
#
# 您可以在启动 upsmon 时用“-u <user>”覆盖它,或者为了方便在这里定义它。
#
# 注意:如果您打算使用重新加载功能,则此文件 (upsmon.conf) 必须可供该用户读取!
# 因为它包含密码,所以不要让它成为世界可读的。
# 此外,不要让它对 upsmon 用户可写,因为它会通过将 SHUTDOWNCMD 更改为恶意内容来创造攻击机会。
#
# 为了获得最佳结果,您应该创建一个新的普通用户,例如“nutmon”,并使其成为“nut”组或类似组的成员。
# 然后在此处指定它并授予对该组的 upsmon.conf 的读取权限。
#
# 此用户不应具有对 upsmon.conf 的写入权限。
#
# RUN_AS_USER nut
# --------------------------------------------------------------------------
# MONITOR <system> <powervalue> <username> <password> ("master"|"slave")
#
# 列出您要监控的系统。 并非所有这些都可能为运行 upsmon 的系统供电,但如果你想观看它,它必须在本节中。
#
# 您必须至少声明其中一项。
#
# <system> 是 <upsname>@<hostname>[:<port>] 形式的 UPS 标识符,如 ups@localhost、su700@mybox 等。
#
# Examples:
#
# - "su700@mybox" 表示名为“mybox”的系统上名为“su700”的 UPS
#
# - "fenton@bigbox:5678" 是一个名为“bigbox”的系统上名为“fenton”的 UPS,它在端口“5678”上运行 upsd。
#
# UPS 名称(如“su700”和“fenton”)在 ups.conf 中的 [brackets] 中设置,用于标识特定驱动程序的部分。
#
# 如果主机“doghouse”上的 ups.conf 有一个名为“snoopy”的部分,则它的标识符将为“snoopy@doghouse”。
#
# <powervalue> 是一个整数 - 此 UPS 为该系统供电的电源数量。
# 大多数计算机只有一个电源,因此通常设置为 1。您需要一个非常大或特殊的盒子才能在此处设置任何其他值。
#
# 对于不提供任何电源但仍要监视的系统,您也可以将其设置为 0。 当您想了解给定 UPS 的变化而不在它变得关键时关闭时使用此选项,除非 <powervalue> 为 0。
#
# <username> 和 <password> 必须与该系统的 upsd.users 中的条目相匹配。 如果您的用户名是“monmaster”,密码是“blah”,upsd.users 将如下所示:
#
# [monmaster]
# password = blah
# upsmon master (or slave)
#
# “master”表示该系统将最后关闭,让从属系统有时间首先关闭。
#
# "slave" 意味着当电源变得关键时,该系统会立即关闭。
#
# Examples:
#
# MONITOR myups@bigserver 1 monmaster blah master
# MONITOR su700@server.example.com 1 upsmon secretpass slave
# MONITOR myups@localhost 1 upsmon pass master (or slave)
# --------------------------------------------------------------------------
# MINSUPPLIES <num>
#
# 给出为保持该系统运行而必须通电的电源数量。 大多数系统都有一个电源,因此您可以在此字段中输入“1”。
#
# 大型/昂贵的服务器类型系统通常有更多,并且可以在缺少一些的情况下运行。 例如,HP NetServer LH4 可以运行 4 个中的 2 个,因此您可以将其设置为 2。这个想法是让机器尽可能长时间地运行,对吧?
#
# 显然,您必须将冗余电源放在不同的 UPS 电路上,这样才有意义! 有关如何使用此功能的更多信息和想法,请参阅 docs 子目录中的 big-servers.txt。
MINSUPPLIES 1
# --------------------------------------------------------------------------
# SHUTDOWNCMD "<command>"
#
# upsmon 在系统需要关闭时运行此命令。
#
# 这应该适用于几乎所有地方......如果它没有,那么改变它。
SHUTDOWNCMD "/sbin/shutdown -h +0"
# --------------------------------------------------------------------------
# NOTIFYCMD <command>
#
# upsmon 在事情发生时调用它来发送消息
#
# 调用此命令时将消息的全文作为一个参数。
# 环境字符串 NOTIFYTYPE 将包含导致此事件发生的任何类型字符串。
#
# 请注意,这仅针对通过 NOTIFYFLAG 设置了 EXEC 的 NOTIFY 事件调用。 有关更多详细信息,请参见下面的 NOTIFYFLAG。
#
# 制作某种 shell 脚本可能不是一个坏主意。 有关更多信息和想法,请参阅 docs/scheduling.txt
#
# Example:
# NOTIFYCMD /bin/notifyme
# --------------------------------------------------------------------------
# POLLFREQ <n>
#
# 正常活动的轮询频率,以秒为单位。
#
# 调整它以防止 upsmon 淹没您的网络,但不要让它太高,否则它可能会错过某些短暂的电源事件。
POLLFREQ 5
# --------------------------------------------------------------------------
# POLLFREQALERT <n>
#
# UPS 使用电池时的轮询频率(以秒为单位)。
#
# 您可以将此数字设置为低于 POLLFREQ,这样当任何 UPS 使用电池运行时更新速度会更快。
# 如果你有很多这样的东西在运行,这是调整网络负载的好方法。
#
# 这个和 POLLFREQ 的默认值都是 5 秒。
POLLFREQALERT 5
# --------------------------------------------------------------------------
# HOSTSYNC - 在放弃另一个 upsmon 之前 upsmon 将等待多长时间
#
# 一旦设置了强制关闭 (FSD) 标志,主 upsmon 进程在等待从属断开连接时使用此编号。
# 如果他们在这么多秒后仍未断开连接,则在没有他们的情况下继续进行。
#
# 类似地,upsmon 从属进程等待主 upsmon 设置 FSD 的时间间隔直到它们正在监视的 UPS 变得关键 - 即电池供电和电池电量不足。 如果 master 没有完成它的工作,slaves 无论如何都会关闭以避免损坏文件系统。
#
# 执行此“等待 FSD”是为了避免在主机轮询之间状态更改为关键并返回的竞争。
HOSTSYNC 15
# --------------------------------------------------------------------------
# DEADTIME - 在宣布陈旧的 ups“死亡”之前等待的时间间隔
#
# upsmon 要求 UPS 每隔几秒提供一次状态信息(请参阅 POLLFREQ 和 POLLFREQALERT)以保持更新。
# 如果状态获取失败,则 UPS 被标记为陈旧。 如果它保持陈旧状态超过 DEADTIME 秒,则 UPS 被标记为已停止运行。
#
# 假定最后一次使用电池供电的 UPS 已耗尽电量已进入低电量状态。
# 如果它正在为您的系统提供临界电量,这可能会强制关机。
#
# 注意:DEADTIME 应该是 POLLFREQ 和 POLLFREQALERT 的倍数。
# 否则你将拥有“死”的 UPS,因为 upsmon 没有足够快地轮询它们。 经验法则:取两个 POLLFREQ 值中较大的一个,然后乘以 3。
DEADTIME 15
# --------------------------------------------------------------------------
# POWERDOWNFLAG - 用于在主系统上强制关闭 UPS 的标志文件
#
# 当需要关闭负载时,upsmon 将在主模式下创建一个具有此名称的文件。
# 您应该在关闭脚本中检查此文件是否存在,如果存在则运行“upsdrvctl shutdown”。
#
# 有关详细信息,请参阅 docs 子目录中的 config-notes.txt 文件。
# 请参阅部分:[[UPS_shutdown]]“为低电量事件配置自动关机”或参阅在线版本。
POWERDOWNFLAG /etc/killpower
# --------------------------------------------------------------------------
# NOTIFYMSG - 当某些事件发生时由 upsmon 发送的更改消息
#
# 如果您愿意,可以将默认消息更改为其他内容。
#
# NOTIFYMSG <notify type> "message"
#
# NOTIFYMSG ONLINE "UPS %s on line power"
# NOTIFYMSG ONBATT "UPS %s on battery"
# NOTIFYMSG LOWBATT "UPS %s battery is low"
# NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
# NOTIFYMSG COMMOK "Communications with UPS %s established"
# NOTIFYMSG COMMBAD "Communications with UPS %s lost"
# NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
# NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
# NOTIFYMSG NOCOMM "UPS %s is unavailable"
# NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
#
# 请注意,%s 已替换为相关 UPS 的标识符。
#
# Possible values for <notify type>:
#
# ONLINE:UPS 已恢复在线
# ONBATT:UPS 使用电池
# LOWBATT : UPS 电池电量低(如果也在电池上,它是“严重的”)
# FSD : UPS 正在被主机关闭 (FSD = "Forced Shutdown")
# COMMOK:与 UPS 建立的通信
# COMMBAD:通信丢失到 UPS
# SHUTDOWN : 系统正在关闭
# REPLBATT : UPS 电池坏了,需要更换
# NOCOMM:UPS 不可用(无法联系监控)
# NOPARENT : 关闭系统的进程已经死亡(shutdown impossible)
# --------------------------------------------------------------------------
# NOTIFYFLAG - 当 NOTIFY 事件发生时改变 upsmon 的行为
#
# 默认情况下,upsmon 发送 walls(全局消息给所有登录用户)并在事情发生时写入系统日志。 你可以改变这个。
#
# NOTIFYFLAG <notify type> <flag>[+<flag>][+<flag>] ...
#
# NOTIFYFLAG ONLINE SYSLOG+WALL
# NOTIFYFLAG ONBATT SYSLOG+WALL
# NOTIFYFLAG LOWBATT SYSLOG+WALL
# NOTIFYFLAG FSD SYSLOG+WALL
# NOTIFYFLAG COMMOK SYSLOG+WALL
# NOTIFYFLAG COMMBAD SYSLOG+WALL
# NOTIFYFLAG SHUTDOWN SYSLOG+WALL
# NOTIFYFLAG REPLBATT SYSLOG+WALL
# NOTIFYFLAG NOCOMM SYSLOG+WALL
# NOTIFYFLAG NOPARENT SYSLOG+WALL
#
# 标志的可能值:
#
# SYSLOG - 将消息写入 rsyslog
# WALL - 将消息写给系统上的所有用户
# EXEC - 使用消息执行 NOTIFY CMD(见上文)
# IGNORE - 不要做任何事情#
#
# 如果您使用 IGNORE,请不要在同一行中使用任何其他标志。
# --------------------------------------------------------------------------
# RBWARNTIME - 以秒为单位的更换电池警告时间
#
# upsmon 通常会每 43200 秒(即 12 小时)警告您需要更换电池。 它通过触发一个 NOTIFY_REPLBATT 来做到这一点,然后由您在上面定义的常用通知结构处理。
#
# 如果您不喜欢此数字,请在此处覆盖它。
RBWARNTIME 43200
# --------------------------------------------------------------------------
# NOCOMMWARNTIME - 以秒为单位的无通信警告时间
#
# 如果 upsmon 无法与此文件中定义的任何 UPS 条目对话,它会通过通常的通知系统通知您。
# 默认情况下,它将每 300 秒触发一次 NOTIFY_NOCOMM,除非您使用此指令更改间隔。
NOCOMMWARNTIME 300
# --------------------------------------------------------------------------
# FINALDELAY - 关闭系统前的最后一个休眠间隔
#
# 在主机上,upsmon 将在发送 NOTIFY_SHUTDOWN 之后等待这么长时间,然后再执行您的 SHUTDOWNCMD。
# 如果您需要在这些事件之间做某事,请增加此数字。 请记住,此时您的 UPS 几乎已耗尽,所以不要将其设置得太高。
#
# 或者,您可以将其设置得非常低,这样您就不必等待关闭时间。
# 一些 UPS 不会对电池电量不足给出太多警告,并且需要此处的值 0 才能安全关机。
#
# 注意:如果slave上的FINALDELAY大于master上的HOSTSYNC,master会放弃等待slave断开连接。
FINALDELAY 5
# --------------------------------------------------------------------------
# CERTPATH - 证书路径(数据库目录或带有 CA 的目录)
#
# 当使用 SSL 支持编译时,您可以在此处输入证书路径。
#
# With NSS:
# 证书存储在专用数据库中(分为 3 个文件)。 指定数据库目录的路径。
#
# CERTPATH /etc/nut/cert/upsmon
#
# With OpenSSL:
# 包含 PEM 格式的 CA 证书的目录,用于验证 upsd 服务器提供的服务器证书。
# 每个文件都包含一个 CA 证书。 这些文件由 CA 主题名称哈希值查找,因此该值必须可用。
#
# CERTPATH /usr/ssl/certs
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
# --------------------------------------------------------------------------
# CERTIDENT - self certificate name and database password
# CERTIDENT <certificate name> <database password>
#
# 当使用 NSS 的 SSL 支持进行编译时,您可以指定要从数据库中检索的证书名称以验证自身以及访问证书相关私钥所需的密码。
#
# CERTIDENT "my nut monitor" "MyPasSw0rD"
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
# --------------------------------------------------------------------------
# CERTHOST - security properties for an host
# CERTHOST <hostname> <certificate name> <certverify> <forcessl>
#
# 当使用 NSS 的 SSL 支持编译时,您可以为您可以联系的每个服务器指定安全指令。
# 每个条目都将服务器名称与预期的证书名称和标志进行映射,以指示服务器证书是否经过验证以及连接是否必须安全。
#
# CERTHOST localhost "My nut server" 1 1
#
# 有关 NUT 中 SSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。
# --------------------------------------------------------------------------
# CERTVERIFY - 让 upsmon 验证所有与证书的连接
# CERTVERIFY 1
#
# 当使用 SSL 支持编译时,使 upsmon 验证所有与证书的连接。
# 否则,无法保证 upsd 是正确的主机。
# 启用此功能可大大降低中间人攻击的风险。
# 这有效地强制使用 SSL,所以不要使用它,除非您所有的 upsd 主机都准备好使用 SSL 并且有它们的证书。
# 当使用 NSS 对 SSL 的支持进行编译时,可以为使用 CERTHOST 指令指定的主机覆盖。
# --------------------------------------------------------------------------
# FORCESSL - 强制 upsmon 使用 SSL
# FORCESSL 1
#
# 使用 SSL 编译时,指定必须使用安全连接与 upsd 通信。
# 如果您不使用“CERTVERIFY 1”,那么这至少可以确保没有人可以不费吹灰之力就嗅探您的会话。
# 如果远程 upsd 不支持 SSL,设置这个将使 upsmon 断开连接,所以不要使用它,除非它们都在运行。
# 当使用 NSS 对 SSL 的支持进行编译时,可以为使用 CERTHOST 指令指定的主机覆盖。
upssched.conf
# Network UPS Tools - upssched.conf sample file
#
# ============================================================================
#
# 调用此脚本来为触发的计时器调用命令。
# CMDSCRIPT <scriptname>
#
# It is given a single argument - the <timername> in your
# AT ... START-TIMER defines.
#
# 这必须在第一行 AT 之前定义。 否则程序会抱怨并退出而不做任何事情。
#
# 带有大 case..esac 构造的 shell 脚本应该可以很好地解决这个问题。
# 提供了一个示例来帮助您入门。
#CMDSCRIPT /bin/upssched-cmd
# ============================================================================
#
# PIPEFN <filename>
#
# 这设置了 FIFO 的文件名,它将在进程之间传递通信以启动和停止计时器。
# 这应该设置为普通用户无法创建文件的路径,因为可能存在符号链接和其他恶意行为。
#
# 注意:如果您正在运行 Solaris 或类似系统,upssched 在此文件上设置的权限*不足以*保证您的安全。
# 如果您的操作系统忽略了 FIFO 的权限,那么您必须将它放在一个受保护的目录中!
#
# 注意 2:默认情况下,upsmon 将以您在 upsmon.conf 中使用 RUN_AS_USER 定义的任何用户身份运行 upssched。
# 确保用户可以在您用于 PIPEFN 和 LOCKFN 的路径中创建文件和写入文件。
#
# 我的建议:为 upssched 创建一个特殊的目录,将其归您的 upsmon 用户所有,然后将其用于两者。
#
# 这在默认情况下被注释掉,让您访问这个文件并在可能打开一个漏洞之前考虑您的系统是如何工作的。
#
# PIPEFN /run/nut/upssched/upssched.pipe
# ============================================================================
#
# LOCKFN <filename>
#
# 必需的。 这是在 1.2.1 版本之后添加的。
#
# upssched 需要能够创建此文件名,以避免在几乎同时从 upsmon 调度两个事件时出现竞争条件。
# 该文件只会短暂存在。 它不得由任何其他进程创建。
#
# 您应该将它放在与 PIPEFN 相同的目录中。
#
# LOCKFN /run/nut/upssched/upssched.lock
# ============================================================================
#
# AT <notifytype> <upsname> <command>
#
# 为 UPS <upsname> 上的特定事件 <notifytype> 定义处理程序。
#
# <upsname> 可以是特殊值 * 以将此处理程序应用于 <upsname> 的每个可能值。
#
# 当它发生时,通过您的 CMDSCRIPT 运行命令 <command>。
#
# 请注意,将使用与当前事件的 <notifytype> 和 <upsname> 匹配的任何 AT。
# ============================================================================
#
# 可能的 AT 命令:
#
# - START-TIMER <timername> <interval>
#
# 启动一个名为 <timername> 的计时器,它将在 <interval> 秒后触发,以 <timername> 作为第一个参数调用您的 CMDSCRIPT。
#
# Example:
# 启动一个计时器,该计时器将在任何 UPS (*) 消失 10 秒时执行
#
# AT COMMBAD * START-TIMER upsgone 10
# -----------------------------------------------------------------------
#
# - CANCEL-TIMER <timername> [cmd]
#
# 如果可能,取消名为 <timername> 的正在运行的计时器。 如果计时器已过,则将可选参数 <cmd> 传递给 CMDSCRIPT。
#
# Example:
# 如果特定的 UPS (myups@localhost) 重新联机,则在它触发之前停止计时器
#
# AT COMMOK myups@localhost CANCEL-TIMER upsgone
# -----------------------------------------------------------------------
#
# - EXECUTE <command>
#
# 立即将 <command> 作为参数传递给 CMDSCRIPT。
#
# Example:
# 如果任何 UPS (*) 恢复为市电,则通过 CMDSCRIPT 执行“ups-back-on-line”。
#
# AT ONLINE * EXECUTE ups-back-on-line
upssched-cmd
#!/bin/sh
case $1 in
power-off)
/sbin/shutdown -h now && /sbin/upsmon -c fsd
;;
*)
logger -t upssched "Unrecognized command: $1"
;;
esac
官方手册
Network UPS Tools User Manual
各个配置文件
写的可以的文章
PVE UPS NUT配置 自动关机
PVE 配置群晖网络UPS