Linux

一台伺服器,兩台冗餘電源上的 APC UPS:如何觸發關機?

  • January 26, 2017

我有一個機架伺服器,它的冗餘電源插入兩個 APC Smart-UPS 3000 XLM。每個 UPS 都連接到兩個不同的主電源。

兩個 apcupsd 實例正在執行,每個實例都連接到自己的 UPS。它們都可以檢測 UPS 何時使用電池,然後每個 UPS 都可以觸發伺服器關機。

問題是:如果只有一個 UPS 沒電了怎麼不關機?

注意:Smart-UPS 3000 XLM 具有“電源同步”功能,能夠連接到其對端並檢測其狀態。但是,當我從其中一個拔下插頭時,仍然發送了關機命令。我正在考慮修改關閉腳本以使用“apcaccess”檢查其他 ups 是否關閉。任何這方面的經驗將不勝感激!

目前,當兩台 UPS 中的一台當機時,會觸發doshutdown事件,並通過**apccontrol執行預設腳本。doshutdown腳本忽略第二UPS,因為它們沒有事件連接,並正常進行關機。

為了使doshutdown事件在某種程度上有所關聯,apcupsd 的兩個實例需要一個專門定制的配置文件。差異將存在於必須執行事件腳本的目錄中。

First ups 的主要屬性,在/etc/apcupsd/apcupsd.ups0.conf

SCRIPTDIR /etc/apcupsd/ups0
UPSNAME ups0
DEVICE /dev/ups0
PWRFAILDIR /etc/apcupsd/ups0
NOLOGINDIR /etc/apcupsd/ups0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.0.events

而對於 ups1,在/etc/apcupsd/apcupsd.ups1.conf

SCRIPTDIR /etc/apcupsd/ups1
UPSNAME ups1
DEVICE /dev/ups1
PWRFAILDIR /etc/apcupsd/ups1
NOLOGINDIR /etc/apcupsd/ups1
NISPORT 3552
EVENTSFILE /var/log/apcupsd.1.events

每個scriptdir都應該獲得預設腳本的副本。

我們要自定義doshutdown腳本,它不會直接關機,而是要檢查其他 UPS 是否還在開機,或者是否處於關機模式。

doshutdown腳本的頂部,我們可以添加類似

對於UPS0

if [ ! -f /tmp/ups1.is.down ]
then
 touch /tmp/ups0.is.down
 exit 99
fi

對於UPS1

if [ ! -f /tmp/ups0.is.down ]
then
 touch /tmp/ups1.is.down
 exit 99
fi

狀態 99 有一個特殊的含義,它告訴apccontrol停止正在進行的操作。這五行檢查是否已創建另一個 UPS-down-file ;如果,則為 ups 關閉創建 down-file,並退出。如果,則表示另一台 UPS 已關閉,這台 UPS 也已關閉,因此腳本應繼續並關閉機器。

文件/tmp/usp[01].is.down表明 ups 是否

$$ 01 $$目前處於關閉狀態。 重要提示:apcupsd 的 init.d 啟動腳本應該刪除這些文件,如果它們是在之前的會話中創建的:

rm -f /tmp/usp[01].is.down

最後,上面創建的目錄,/etc/apcupsd/ups

$$ 01 $$應授予apcupsd使用者(或執行實例的任何相關使用者)的訪問權限。

chown -R apcupsd /etc/apcupsd/ups[01]

請查看詳細文件

編輯修復了/tmp/ups[01].is.down名稱,.is失去了。

引用自:https://serverfault.com/questions/222806