摘 要: 市電停電后,當服務器消耗完UPS電量時,就會非正常關機,可能導致丟失數據或者產生故障。本文介紹了由服務器自動判斷停電和自動關機的方法。
關鍵詞: 服務器 UPS 停電 自動關機
雖然接UPS電源能防止服務器突然因停電而帶來數據丟失或者導致服務器故障,但是小型UPS電源不能像銀行系統一樣持續給服務器供電,一般只能持續幾十分鐘或者1個多小時(取決于電池容量)。當UPS電量用完而市電還沒有來時,服務器依然會非正常關機,可能導致數據丟失或者服務器故障。我院實驗室中有若干臺服務器,配有一臺UPS電源,停電時能支撐服務器正常工作約1小時。為了防止停電時,服務器因UPS電量消耗完而非正常關機,現介紹Windows 2003服務器和Linux服務器的解決方法。
一、程序設計大致思路
服務器用ping命令去ping本棟教學樓的網關(202.201.165.254),若ping通,服務器不關機;若ping不通時,接著轉向ping一臺本實驗室的一臺一直開的計算機(工作需要,但是此計算機沒有接到UPS電源,地址是局域網172.16.1.8),若ping通,服務器不關機;若仍然ping不通則表示停電,服務器定時關機,但依然接著ping本棟教學樓的網關和計算機,若ping通了任意一個,則服務器取消關機,否則接著ping,直到服務器自動關機。
二、具體方案
1. Windows2003服務器
在服務器桌面建立一個文本文件,取名為“tingdian.bat”,內容如下:
@echo off
:myping
@ping 202.201.165.254 |find "timed out">nul 2>nul && @echo樓網關不通ping計算機A && goto:myping1
@echo網絡正常ping網關
goto myping
:myping1
@ping 172.16.1.8 |find "timed out">nul 2>nul && @echo計算機A也不通開始關機&& goto:guanji
@echo網絡正常ping計算機A
goto myping1
:guanji
shutdown -s -t 300
:myping888
@ping 202.201.165.254 |find"timed out">nul 2>nul && @echo樓網關還是不通ping計算機A && goto:myping111
@echo又來電了網絡正常ping網關取消關機
shutdown -a
goto myping
:myping111
@ping 172.16.1.8 |find "timed out">nul 2>nul && @echo都不通再ping一次&& goto:myping888
@echo又來電了網絡正常ping計算機A取消關機
shutdown -a
goto myping1
然后雙擊運行此腳本即可。
2. linux服務器
用root用戶在服務器中先建立一個文件“tingdian.sh”,內容如下:
#!/bin/sh
while true
do
ping -W 5 -c 1 202.201.165.254 >/dev/null
ret=$?
if[$ret -eq 0]
then sleep 600
else
ping -W 5 -c 1 172.16.1.8>/dev/null
ret=$?
if[$ret -eq 0]
then sleep 600
else
shutdown -h 5
fi
fi
done
再建立一個文件“quxiao.sh”,內容如下:
#!/bin/sh
while true
do
ping -W 5 -c 1 202.201.165.254 >/dev/null
ret=$?
if[$ret -eq 0]
then shutdown -c
else
ping -W 5 -c 1 172.16.1.8 >/dev/null
ret=$?
if[$ret -eq 0]
then shutdown -c
else
sleep 300
fi
fi
done
然后把該文件添加執行權限,執行chmod u+x tingdian.sh quxiao.sh,然后開兩個終端,一個終端中執行tingdian.sh腳本,另一個終端中執行quxiao.sh腳本即可。由于linux服務器關機命令shutdown必須由root用戶執行,因此此腳本tingdian.sh用root執行。
三、結語
盡管市場有帶自動關機功能的UPS或者相關硬件,但本文介紹的方案完全由腳本執行,避免了因缺乏硬件和資金等問題而帶來的困擾,是一種不錯的保護服務器的方法。雖然一個學期也不見得停一兩次電,但是一旦因停電非正常關機而導致不良后果可就晚了,所以還是多一些防范措施為好。
參考文獻:
[1]郭陽.Windows XP的自動關機.電腦知識與技術,2005-29.