一台伺服器,兩台冗餘電源上的 APC UPS:如何觸發關機?
我有一個機架伺服器,它的冗餘電源插入兩個 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
失去了。