这里的讨论是针对单调模式的 UPS 控制而写就的。然而,
大部分的过程对单调的 UPS 与聪明的 UPS 几乎是一样的。最大的不同在于 UPS
监控程序 (基本上是 powerd
) 如何与 UPS 沟通。
在开始之前,我建议以下的工作流程:
powerd
(或其他类似的软件) 。init
程序使它能在 powerfail 及 powerok
事件发生时做适当的处理 (例如分别启动 shutdown
程序及停止正在执行的
shutdown
程序)。
当电力消失时, UPS 持续供应电脑所需的电力, 并以送出重置信号或是在它的控制阜上打开连接信号以通知电脑电力消失了。
信号缆线是设计为当 UPS 送出重置信号时,会使得特殊的序列阜控制接脚
(基本上是 DCD
) 出现高电位。
powerd
程序负责监视序列阜。它保持著 UPS 所需而升高 /
降低序列阜控制接脚的高 / 低电位 (基本上, DTR
接脚必须保持在高电位且关闭 UPS 的接脚必须保持在低电位) 。当 powerd
发觉控制接脚变成高电位,它会在 /etc/powerfail
档中写入
FAIL
这个字并送 SIGPWR
信号给 init
行程。
当控制接脚再次变回低电位时,它会在 /etc/powerfail
档中写入 OK
这个字并送 SIGPWR
信号给 init
。
当它接到了 SIGPWR
信号,它会检查 /etc/powerfail
档。
如果里头是 FAIL
这个字眼它会执行 /etc/inittab
档中 powerfail
那一行的指令。如果里头是 OK
这个字它则执行 inittab
档中 powerokwait
那一行的指令。
以下我们假设您有一条可以和 powerd
正常工作的信号缆线。
如果您不确定您的信号缆线是否可以工作 (或它如何工作),请参考
信号缆线反向分析及修改 power.c
一节,那儿有关于少见的信号缆线处理及重新设定 powerd.c
的信息。
信号缆线反向分析及修改 power.c<@ref>serial-port序列阜接脚的指定 及
信号缆线反向分析及修改 power.c<@ref>serial-port序列阜接脚的指定<@ref>ioctl有关读写 RS232 这两节也将对您有帮助。
如果您需要制作一条信号缆线,请见 如何制作信号缆线 的详细说明,以及 如何制作信号缆线<@ref>ups-specificUPS 资料节选 一节中有关您的 UPS 的小节。 后者可能也包含了制造商所提供的信号缆线的相关信息。 或许您应至少将 如何制作信号缆线<@ref>ups-specificUPS 资料节选<@ref>ups-specificUPS 资料节选 中所有的小节浏览过一遍,因为每一小节都会有一些额外的一般性资料能对您有帮助。
/etc/inittab
档。写入像以下的内容:
# What to do when power fails (Halt system & drain battery :): pf::powerfail:/etc/powerfailscript +5 # If power is back before shutdown, cancel the running shutdown. pg:0123456:powerokwait:/etc/powerokscript
/etc/powerfailscript
及 /etc/powerokscript
这两个 script 档分别在五分钟 (或其他您喜欢的时间)
之内进行关机及停止任何存在的 shutdown
程序。
依您所用的 shutdown
程序版本的不同,
它可能会相当单简以至于您根本不需使用 script 档,或者是一行 bash
的 script 档像是以下这一行:
kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'`(为了避免您弄错,上一行中第一个单引号是反向单引号,第二及第三个是单引号, 而最后一个则为反向单引号。)
init
重新读取 inittab
档中的设定:
telinit q
powerd
。其语法如下:
powerd <line>其中,请您自行将
<line>
这个字替换成 modem
所连接的序列阜名,像是 /dev/cua1
。
powerd
。
/etc/powerfailscript
是否已开始执行。shutdown
是否正在执行。/etc/powerokscript
是否已开始执行。/etc/powerfailscript
是否已停止执行。shutdown
是否已停止执行。shutdown
是否已在运作,并等待一段时间。
确定电脑在 UPS 的电力用完前完全地关机。此一步骤是很危险的,
因为如果 UPS 的电力在电脑完成关机之前先用完了,
您的文档系统将会受损,且您将可能丢失一些文档。
您可能在进行这项测试之前会想要备份您所有的文档,
并将开始关机的时间设短一点以开始这项测试。恭喜您! 您的 Linux 系统现在已在 UPS 的保护下, 且它将会在电力耗尽之前安全地关机了。
powerd.c
使它在监视 UPS 的信号线时能得知电池电力已弱。
当电力微弱时,马上进行紧急关机程序。powerfail
情况下关机时,
能够在完成所有工作之后将 UPS 关掉。