在UPS上断电后closureslinux服务器

我想closures我的Linux服务器,当它在UPS上时停电。 UPS运行额外30分钟。 我知道一些UPS可以自动closures服务器,但这不是我现在的情况。

所以我想我的路由器(或networking中的一台PC),如果ping失败,这意味着停电(也可能有一个networking问题,但不要介意),脚本将运行

"#shutdown now" 

我怎样才能做到这一点?

编辑:UPS正在喂两个小型服务器,所以我不能使用串行端口(至less为他们两个在同一时间)。 我们在塞浦路斯的动力装置被爆炸摧毁,所以直到我得到每台服务器的UPS我需要一个临时解决scheme。 这就是为什么我这样问。

你使用的是apc ups吗? 如果这样看,apcupsd,这是伟大的,可以做到这一点和许多其他类似的东西很容易。

正如bmdan所说,你不可能这样做。

许多Linux系统都包含看门狗软件包。 该软件包将通过运行testing来监视某些情况,如果出现故障,默认情况下会重启系统。

使用修复二进制选项,您可以告诉它运行诸如shutdown -h而不是重新启动。 看门狗默认包含pingtesting。

Monit可以做到这一点,并会更喜欢cron。

尝试一个configuration行,如:

 Check host router with address 192.168.1.1 if failed icmp type echo with timeout 120 seconds then exec "/sbin/shutdown now" alert root@localhost 

真的最好的解决scheme是APCUPSD,你应该得到一些具有监视function(USB,串行,以太网)的东西。

在Ubuntu上我使用mii-tool来检查LAN链路是否正常如果链路不正常3次,那么我closures系统

电力恢复后,我有与openwrt固件Linksys发送唤醒LAN到我的系统。

制作一个bashsscript并添加到chron:

  $1 = "some.host.ip.address"; if ! ping -c 1 -w 5 "$1" &>/dev/null ; then shutdown -h now fi 

请记住,如果你的路由器发生故障,而不是你的服务器,你正在下降…

如果您使用NUT(networkingUPS工具)来监视您的服务器,那么您的客户可以这样做。 UPS连接的主机应该是最后一个closures的主机。 NUT服务器在UNIX或Linux上运行,但客户端可用于Windows。

有一个选项可以在各种事件上运行脚本(如果需要,可以延迟)。 在你的情况下,你会想在几秒钟的停机触发关机。 如果你有局域网唤醒,你可能会在恢复供电后的一段时间内触发唤醒事件。

基于双服务器一UPS的问题,现在这个解决scheme变得更简单了(而且更加强大!)。 有可能有更好的方法来做到这一点,但我的方法是添加一个用户可以运行sudo /sbin/shutdown -h now在没有插入UPS的盒子,然后修改/ etc /机器#1上的inittab(尝试)创build一个到机器#2的ssh连接,并在完成自己的closures之前运行该命令。

两台机器的完整实施,Volta(带有UPS串行连接)和Nulla(无UPS连接)是两台机器的名称:

  • Nulla上的/etc/sudoers
 默认值:remoteshutdown!requiretty
 remoteshutdown ALL =(ALL)NOPASSWD:/ sbin / shutdown 
  • /etc/inittab在Volta上:
  PF :: POWERFAIL:在/ usr / local / sbin中/关机 
  • /usr/local/sbin/powerdown (chmod 700)在Volta上:
  #!/斌/庆典

 #在后台运行,以免阻塞,等待时间太长,无法安排自己关机。
 #记住用手连接一次,并以root身份接受Nulla的主机密钥
 / usr / bin / ssh remoteshutdown @ Nulla'sudo / sbin / shutdown -f -h +2“Power Failure; System Shutdown Down”'&

 #放下自己
 / sbin / shutdown -f -h +2“电源故障;系统closures” 

正如我所说,可能还有另一种方法来做到这一点,但这是我可以不用下载任何东西就可以编写的解决scheme。 ;)