PVE+NUT+群晖等配置

2023-05-16

文章目录

  • 配置
    • 文件说明
  • 默认配置(翻译的)
    • ups.conf(设置ups通信相关)
    • upsd.conf(设置ups客户访问的相关信息)
    • upsd.users(设置upsd用户)
    • nut.conf(nut的配置,主要是模式,决定使用哪些文件)
    • upsmon.conf
    • upssched.conf
    • upssched-cmd
    • 官方手册
    • 写的可以的文章

只需要实现,断电后,PVE关闭所有的虚拟机,低电量关闭PVE,如果PVE还没有关闭,来电了,则打开所有虚拟机

配置

  1. 安装必要工具
    sudo apt install nut nut-client nut-server

  2. 扫描查看ups信息
    ups-scanner -U
    在这里插入图片描述

  3. 将配置放在ups.conf中,注意名字改为ups(为了群晖能够连接上)
    在这里插入图片描述

  4. 启动驱动程序 upsdrvctl start

在这里插入图片描述

  1. 设置监听,修改upsd.conf文件,最后一行添加LISTEN 0.0.0.0 3493

在这里插入图片描述

  1. 修改nut.conf模式,让upsd服务决定哪些文件有用,因为我们让pve作为服务器,因此为netserver模式
    在这里插入图片描述
  2. 启动upsd服务

输入upsd

在这里插入图片描述

  1. 测试一下连接,使用upsc ups@localhost ups.status

在这里插入图片描述

  1. 这个时候,通过群晖访问应该是没有问题的。

在这里插入图片描述

  1. 设置相关事件的处理,总的来说首先是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
  1. 然后编写配置文件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
  1. 然后编写脚本(要有执行权限)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
  1. 重启所有服务
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,然后是 12 等等。 要从关闭序列中排除 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 用户手册的安全章节,了解有关 NUTSSL 支持的更多信息。
#
# 有关 NUTSSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。

# =======================================================================
# CERTPATH <certificate file or directory>
# CERTPATH /usr/local/ups/etc/cert/upsd
#
# 当使用 NSS 后端的 SSL 支持编译时,您可以在此处输入证书路径。
# 证书存储在专用数据库中(分为 3 个文件)。
# 指定数据库目录的路径。
# 
# 有关 NUTSSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。

# =======================================================================
# CERTIDENT <certificate name> <database password>
# CERTIDENT "my nut server" "MyPasSw0rD"
#
# 当使用 NSS 后端的 SSL 支持进行编译时,您可以指定要从数据库中检索的证书名称以验证自身以及访问证书相关私钥所需的密码。
# 
# 有关 NUTSSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。

# =======================================================================
# CERTREQUEST <certificate request level>
# CERTREQUEST REQUIRE
#
# 当使用带有 NSS 后端和客户端证书验证的 SSL 支持编译时(默认情况下禁用,请参阅“docs/security.txt”),您可以指定 upsd 是否请求或需要客户端的证书。
# 可能的值是:
#  - 0 不要求客户端提供任何证书
#  - 1 要求所有客户提供证书
#  - 2 要求所有客户提供有效证书
# 
# 有关 NUTSSL 支持的更多信息,请参阅“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: 
#   此模式仅适用于本地配置,使用 1UPS 保护本地系统。
#   这意味着启动 3NUT 层(驱动程序、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 设置了 EXECNOTIFY 事件调用。 有关更多详细信息,请参见下面的 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 每隔几秒提供一次状态信息(请参阅 POLLFREQPOLLFREQALERT)以保持更新。 
# 如果状态获取失败,则 UPS 被标记为陈旧。 如果它保持陈旧状态超过 DEADTIME 秒,则 UPS 被标记为已停止运行。
#
# 假定最后一次使用电池供电的 UPS 已耗尽电量已进入低电量状态。 
# 如果它正在为您的系统提供临界电量,这可能会强制关机。
#
# 注意:DEADTIME 应该是 POLLFREQPOLLFREQALERT 的倍数。
# 否则你将拥有“死”的 UPS,因为 upsmon 没有足够快地轮询它们。 经验法则:取两个 POLLFREQ 值中较大的一个,然后乘以 3DEADTIME 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>:
#
# ONLINEUPS 已恢复在线
# ONBATTUPS 使用电池
# LOWBATT : UPS 电池电量低(如果也在电池上,它是“严重的”)
# FSD : UPS 正在被主机关闭 (FSD = "Forced Shutdown")
# COMMOK:与 UPS 建立的通信
# COMMBAD:通信丢失到 UPS
# SHUTDOWN : 系统正在关闭
# REPLBATT : UPS 电池坏了,需要更换
# NOCOMMUPS 不可用(无法联系监控)
# 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
# 
# 有关 NUTSSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。

# --------------------------------------------------------------------------
# CERTIDENT - self certificate name and database password
# CERTIDENT <certificate name> <database password>
#
# 当使用 NSSSSL 支持进行编译时,您可以指定要从数据库中检索的证书名称以验证自身以及访问证书相关私钥所需的密码。
#
# CERTIDENT "my nut monitor" "MyPasSw0rD"
# 
# 有关 NUTSSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。

# --------------------------------------------------------------------------
# CERTHOST - security properties for an host
# CERTHOST <hostname> <certificate name> <certverify> <forcessl>
#
# 当使用 NSSSSL 支持编译时,您可以为您可以联系的每个服务器指定安全指令。
# 每个条目都将服务器名称与预期的证书名称和标志进行映射,以指示服务器证书是否经过验证以及连接是否必须安全。
#
# CERTHOST localhost "My nut server" 1 1
#
# 有关 NUTSSL 支持的更多信息,请参阅“docs/security.txt”或 NUT 用户手册的安全章节。

# --------------------------------------------------------------------------
# CERTVERIFY - 让 upsmon 验证所有与证书的连接
# CERTVERIFY 1
#
# 当使用 SSL 支持编译时,使 upsmon 验证所有与证书的连接。
# 否则,无法保证 upsd 是正确的主机。
# 启用此功能可大大降低中间人攻击的风险。
# 这有效地强制使用 SSL,所以不要使用它,除非您所有的 upsd 主机都准备好使用 SSL 并且有它们的证书。
# 当使用 NSSSSL 的支持进行编译时,可以为使用 CERTHOST 指令指定的主机覆盖。


# --------------------------------------------------------------------------
# FORCESSL - 强制 upsmon 使用 SSL
# FORCESSL 1
#
# 使用 SSL 编译时,指定必须使用安全连接与 upsd 通信。
# 如果您不使用“CERTVERIFY 1”,那么这至少可以确保没有人可以不费吹灰之力就嗅探您的会话。
# 如果远程 upsd 不支持 SSL,设置这个将使 upsmon 断开连接,所以不要使用它,除非它们都在运行。
# 当使用 NSSSSL 的支持进行编译时,可以为使用 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。 
# 确保用户可以在您用于 PIPEFNLOCKFN 的路径中创建文件和写入文件。
#
# 我的建议:为 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PVE+NUT+群晖等配置 的相关文章

  • FileZilla搭建FTP服务器图解教程,并允许外网访问NAT内网

    FTP是用来在两台计算机之间传输文件 xff0c 是Internet中应用非常广泛的服务之一 FTP服务是网络中经常采用的资源共享方式之一 FTP协议有PORT和PASV两种工作模式 xff0c 即主动模式和被动模式 今天我分享一个最近我自
  • 十进制转换八进制(C语言基础)

    题目描述编程 xff0c 输入一个 xff11 xff10 进制正整数 xff0c 然后输出它所对应的八进制数 输入无输出无样例输入10样例输出12 include lt stdio h gt int main int num m 61 0
  • 【Godot】对 Godot 节点设计的思考

    对 Godot 中节点设计的思考 单个节点的功能设计的想法 xff0c 体会 Godot 的设计思想 低耦合 设计单个节点可复用的节点时 xff0c 调用方法尽量只对当前节点可获取到的变量或方法进行使用 xff0c 比如我写一个可以控制 K
  • 【Godot】行为树(一)了解与设计行为树代码

    行为树介绍 行为树是个节点树 xff0c 父节点通过不断遍历子节点 xff0c 根据不同类型的节点执行不同的分支 最终调用叶节点执行功能 行为树也不难理解 xff0c 他就像代码逻辑一样 xff0c 只是用节点的方式展现出来 xff0c 而
  • 【Godot 4.0】一个简单的匿名方法的使用lambda

    Godot 4 0 beta3 Godot 4 0 中添加了 lambda 表达式 xff0c 匿名方法等很多方便的特性 xff0c 这里我写个用于扫描目录下所有文件的功能 可以看到代码非常简洁 span class token keywo
  • aur报错(错误:一个或多个文件没有通过有效性检查)

    当我们从aur里安装软件时 xff0c 有时会出现这种报错 xff08 如安装deepin wine wechat xff09 61 61 gt 错误 xff1a 一个或多个文件没有通过有效性检查 xff01 Error downloadi
  • Java使用不同方式获取两个集合List的交集、补集、并集(相加)、差集(相减)

    1 明确概念 首先知道几个单词的意思 xff1a 并集 61 union 交集 61 intersection 补集 61 complement 析取 61 disjunction 减去 61 subtract 1 1 并集 对于两个给定集
  • 【VTK】VTK框选表面拾取三角面片——通过观察者命令模式

    VTK框选拾取三角面片 最近需要实现拾取三角面片的交互功能 xff0c 看了官方示例和网友分享 xff0c 都是使用vtkInteractorStyleRubberBandPick搭配vtkAreaPicker 但是具体实现方法都是选择继承
  • 【VTK】VTK框选表面拾取面片——仅选中前表面

    VTK框选表面拾取面片 仅选中前表面 接上一篇 VTK框选表面拾取三角面片 通过观察者命令模式 上一篇最后遗留一个问题 xff0c 框选表面后 xff0c 会把模型背面的面片也一起选中 所以这篇内容是解决该问题的 效果预览 功能说明 通过鼠
  • GoDB开发踩坑记

    前言 前几天因为leancloud网速太慢所以自己写了一个go语言数据库 xff0c 想部署到我的树莓派上 正文 我在写的时候发现了一些神奇的操作 golang 把js变量的表达方式字符串转换成go变量 可以先把它嵌入到一个json字符串中
  • 通过Java反射获得对象里面的所有字段名以及字段对应的值

    首先我们有一个对象类 span class token keyword package span com span class token punctuation span xuzihui span class token punctuat
  • GoDB开发踩坑记(代码实现)

    前言 之前写了一篇GoDB开发踩坑记但是内容有些不全 xff0c 所以来补充一下 所以没看过GoDB开发踩坑记的可以先看一下那篇文章 正文 golang encode josn 把map string interface 转换为json字符
  • vim配置

    众所周知 xff0c vim是一个非常牛逼的文本编辑器 xff0c 但是他的界面很丑 xff0c 而且在终端下面也不能美化多少 但是 xff01 在windows下有一个叫做gvim的玩意儿 xff0c 在mac下有一个叫macvim的东东
  • 全网最简洁Archlinux 安装教程

    Archlinux 安装教程 先从mirrors ustc edu cn下载archlinux安装镜像 然后下载刻录工具etcher Windows版 xff1a Windows版 Linux版 xff1a Linux版 Mac版 xff1
  • CF6E Exposition题解

    前置知识 st 表 xff1a 用于求静态的区间最值问题 不会的同学可以看wsyear巨佬的这篇文章https blog csdn net wsyear article details 114334351 spm 61 1001 2014
  • 最简单的柯西不等式证明

    柯西不等式证明 柯西不等式 xff0c 是形式如下的不等式 a i 2
  • CF1656E Equal Tree Sums题解

    其实这道题不难 首先假设 1 1 1 是根节点 我看到这道题第一反应就是直接假设整棵树权值之和是某一个定值 xff0c 然后再dfs造每一个 a x
  • CF1656D K-good题解

    这场比赛我没打 xff0c 错失上分好机会 这题是真的水 直接根据题意列出式子 xff1a n 61 k k
  • P7914 [CSP-S 2021] 括号序列 题解

    其实T2想清楚就不是很难 xff0c 虽然想清楚也不简单 我这里分享一种很自然的想法 xff0c 当然是区间dp啦 区间dp分6种状态 的种类数 xff0c 这种情况相当与题目中的 S S S xff0c 2到5中都一样 的种类数 xff0
  • 在Mac上安装好Anaconda,但在终端使用conda命令显示不是有效命令的解决方法

    最近新装的Mac OSX10 15 3 xff0c 新装了anaconda xff0c 从window到Mac的过渡 xff0c 有了诸多不适应 在终端中使用conda命令 xff0c 就会出现以下提示 zsh command not fo

随机推荐

  • LINUX 获取公网ip并发送邮件

    LINUX 获取公网ip并发送邮件 问题由来配置环境本机环境配置源 本段为CSDN博主 Tinghua M 创作编写sh文件 本段参考博主 手动销户了 问题由来 运营商的公网IP是动态的 xff0c 因此造成一段时间后无法访问公司资源 我们
  • Linux查看所有服务的状态

    Ubuntu 16 04环境 查看Linux所有服务的运行状态可输入命令 service status all 注意 xff1a all要紧跟在 status后面 xff0c 中间不要有空格 结果 那么 xff0c 服务名称前面的加减号 4
  • Qt 文件树的实现

    Qt 文件树的实现 xff08 QTreeWidget xff0c QTreeWidgetItem xff09 使用Qt框架创建文件树主要是使用了Qt仲的QTreeWidget控件和QTreeWidgetItem控件 其最主要的功能包括文件
  • chromeOS中Linux安装Flatpak,切换Flatpak数据源,安装Remmina应用

    本文基于ChromeOS 版本106 0 5249 112 xff08 正式版本 xff09 xff0c Debain 11版本 设置 开发者 Linux开发环境 启用 chromebook开启Linux容器 以下内容涉及到的技术均为Deb
  • 性能学习笔记--k8s下mysql的连接数分析和调优

    项目背景 xff1a k8s的架构下 xff0c 登录并发100后 xff0c 发现cpu的利用率过高 xff0c 超过75 xff1b 开始不知道是哪个微服务导致的cpu利用率过高 xff0c 需要进行分析 xff08 最终分析是mysq
  • C++比较函数cmp

    本文将简单介绍C 43 43 比较函数 cmp 排序函数sort sort函数是我们常用的库函数 xff0c 它的参数如下 xff1a span class token keyword void span sort span class t
  • 弹性云服务器ECS的选择:为什么我更推荐华为云?

    前言 作为一名嵌入式开发者 xff0c 平常难免不了需要一台云服务器来搭建一个调试物联网设备的测试平台 x1f604 xff0c 因此平时也没少购买云服务器 xff0c 但是云服务器厂商那么多 xff0c 我们到底应该如何做出选择呢 xff
  • git中忽略所有文件后,白名单中添加文件夹及其所有子文件(夹)

    此点很容易就出问题了 xff0c 我用的想法是要么添加 subfiledir 要么添加 subfiledir 但是按照git的逻辑 xff0c 第一行只会让subfiledir添加进来 xff0c 但是其所有子文件以及文件夹是不会被添加进来
  • 51单片机外部中断

    span class token keyword void span span class token function IrInit span span class token punctuation span span class to
  • 51单片机定时器2用作串口

    使用定时器2用作串口 span class token macro property span class token directive hash span span class token directive keyword defin
  • 二进制的计算(原码、补码以及反码)

    带符号 5 2 0000 0101 gt 5 1000 0010 gt 2 然后两个数据都转为补码进行相加 正数的补码等于原码 负数的补码等于符号位不变 xff0c 剩下的取反加一 算补码的时候符号位不参与计算 0000 0101 43 加
  • iwr6843-ROS构建

    需求 ubuntu 18 04版本 安装ros 安装教程 首先安装必要软件 sudo apt install git curl vim y 设置您的计算机以接受来自 packages ros org 的软件 sudo sh c 39 ech
  • 51nod - 1364 最大字典序排列

    给出一个1至N的排列 xff0c 允许你做不超过K次操作 xff0c 每次操作可以将相邻的两个数交换 xff0c 问能够得到的字典序最大的排列是什么 xff1f 例如 xff1a N 61 5 xff0c 1 2 3 4 5 xff0c k
  • esp8266_贝壳物联_arduino

    功能 接收串口数据 xff0c 将串口数据上报到贝壳物联的数据接口 此处为接收0和1数据 xff0c 上报到贝壳物联 贝壳物联平台通讯协议 ArduinoJson解析 ArduinoJson Assistant非常好用的工具 span cl
  • 简历信息粘贴板

    简历信息粘贴板 gitee链接 x1f602 最近简历投递感觉很麻烦 xff0c 所以想整个这个 xff0c 欢迎体验 有用可以整个 随便也水一个文 xff0c 好久没更了 x1f466 描述 厌倦了麻烦的简历填写了吗 是不是感觉切换查找复
  • Python装饰器简单说明

    Python装饰器 官方定义 装饰器本质上是一个Python函数 其实就是闭包 xff0c 它可以让其他函数在不需要做任何代码变动的前提下增加额外功能 xff0c 装饰器的返回值也是一个函数对象 装饰器用于有以下场景 xff0c 比如 插入
  • cpp装饰器模式

    装饰器模式 结构型模式 xff1a 在不改变现有对象结构的情况下 xff0c 向对象添加新的功能 xff0c 同时不改变其结构 重点在于动态的增加删除功能 xff0c 装饰类和被装饰类独立 xff0c 不会耦合 返回的对象已经不是原来的对象
  • windows新增右键菜单,通过wsl中的vim打开文件

    文章目录 查看wsl打开方式添加右键菜单增加图标效果 非常简单的方式 x1f44d 查看wsl打开方式 可以看到我这里使用ubuntu2004 exe可以打开 添加右键菜单 按下win输入regedit xff0c 在右边选择管理员打开 然
  • iwr6843isk-HARbag

    文章目录 描述说明数据信息使用方法动作类型jumpsquatswavewalkboxingjack iwr6843isk搭建ROS环境雷达配置参数to txt中数据预处理 二阶段滑窗处理 环境 github链接 https gitee co
  • PVE+NUT+群晖等配置

    文章目录 配置文件说明 默认配置 翻译的 ups conf 设置ups通信相关 upsd conf 设置ups客户访问的相关信息 upsd users 设置upsd用户 nut conf nut的配置 主要是模式 xff0c 决定使用哪些文