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