通過串口關(guān)閉Linux服務(wù)器
簡介
一個(gè)真正的服務(wù)器一般往往不需要連接鍵盤、顯示器或鼠標(biāo)等外設(shè)。而僅僅需要一個(gè)性能穩(wěn)定的操作系統(tǒng)如Linux和一個(gè)網(wǎng)卡。諸如鼠標(biāo)、鍵盤等外部設(shè)備則往往不必要連接。在運(yùn)行Linux的機(jī)器上,通過網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程管理是最好和最方便的解決方法。
在買服務(wù)器時(shí)應(yīng)該確保在開機(jī)BIOS中有設(shè)定不需要檢測鍵盤的選項(xiàng)。目前市場上大多數(shù)主板廠商的BIOS版本都有這樣的選項(xiàng)。但是仍然有一些主板認(rèn)為自己的的服務(wù)器將只運(yùn)行windows,因此一定會(huì)在啟動(dòng)時(shí)需要一個(gè)鍵盤,因此不推薦使用這種機(jī)器作為服務(wù)器使用。
沒有鍵盤和監(jiān)視器的計(jì)算機(jī)非常適合于作為防火墻、web服務(wù)器、NFS服務(wù)器、郵件服務(wù)器的、ADSL網(wǎng)關(guān)、DNS服務(wù)器的概念等等。而且該機(jī)器不一定是功能非常強(qiáng)大的機(jī)器。即使一個(gè)老的Pentimu100機(jī)器,只要擁有足夠的內(nèi)存就可以同時(shí)服務(wù)數(shù)百個(gè)客戶服務(wù)請求。
服務(wù)器不連接鍵盤、鼠標(biāo)和顯示器的好處是非常方便,因?yàn)榉?wù)器將只是一個(gè)簡單的主機(jī)箱,可以放在任何適合的地方。但有時(shí)候你可能希望能有一個(gè)按鍵來實(shí)現(xiàn)安全的關(guān)閉服務(wù)器而無需首先遠(yuǎn)程登錄服務(wù)器運(yùn)行shutdown命令來實(shí)現(xiàn)關(guān)閉機(jī)器。也可能你現(xiàn)在就在服務(wù)器機(jī)房,而最近的工作站離你有100多米遠(yuǎn);或者你希望某個(gè)沒有root密碼的普通用戶關(guān)閉服務(wù)器。當(dāng)然直接關(guān)閉電源并不是一個(gè)好的想法,因?yàn)檫@樣可能導(dǎo)致丟失數(shù)據(jù)并且在下次啟動(dòng)時(shí)需要很長時(shí)間的文件系統(tǒng)檢測。
解決方法是按照本文的方法安裝一個(gè)很小的、便宜的串口設(shè)備實(shí)現(xiàn)安全關(guān)機(jī)。
設(shè)備
我們將制作一個(gè)小小的、由兩個(gè)LED和一個(gè)按鍵式開關(guān)組成的設(shè)備。其中綠色的LED亮表示當(dāng)前按鍵式開關(guān)是處于激活狀態(tài),緩慢閃爍的黃色LED燈表示服務(wù)器正在啟動(dòng)或者仍然處于關(guān)閉狀態(tài)。為了實(shí)現(xiàn)安全關(guān)閉服務(wù)器需要持續(xù)按下開關(guān)3秒鐘。
如果你按了按鍵開關(guān),亮著的綠色的LED將熄滅,表示正在關(guān)機(jī),這時(shí)候命令"/sbin/shutdown -t2 -h now"被執(zhí)行。在服務(wù)器關(guān)閉過程中黃色的LED將連續(xù)閃爍以進(jìn)行指示。當(dāng)黃色LED不再閃爍時(shí),你仍然需要等待10秒鐘才能關(guān)閉服務(wù)器電源。當(dāng)所有的進(jìn)程被殺掉,磁盤被卸載以后黃色LED將不再閃爍。若你的服務(wù)器支持自動(dòng)關(guān)機(jī)則你不需要考慮10秒的等待時(shí)間,因?yàn)榉?wù)器會(huì)自動(dòng)關(guān)閉電源。
串口
關(guān)于串口令人感興趣的是我們可以通過ioctl系統(tǒng)調(diào)用來控制其中的幾個(gè)管腳。這意味著你不需要修改任何內(nèi)核代碼就可以控制連接到串口的LED或這讀取按鍵式開關(guān)的狀態(tài)。串口有足夠的電壓來驅(qū)動(dòng)兩個(gè)低電壓LED。我們將使用RTS和DTR針來連接LED,并且"Carrier Detect line"被用來讀取按鍵開關(guān)的狀態(tài)。
串口母頭連接器的管腳定義:
9 PIN-connector 25 PIN-connector Name Dir Description
1 8 CD input Carrier Detect
2 3 RXD input Receive Data
3 2 TXD output Transmit Data
4 20 DTR output Data Terminal Ready
5 7 GND -- System Ground
6 6 DSR input Data Set Ready
7 4 RTS output Request to Send
8 5 CTS input Clear to Send
9 22 RI input Ring Indicator
電路
用戶需要下面元器件來制作這個(gè)串口關(guān)機(jī)設(shè)備:
1 綠色低電壓LED (一個(gè)普通LED同樣可以工作,但是亮燈過低)
1 黃色低電壓LED
2 1.5K歐姆的電阻
1 6.8K歐姆的電阻
1 小按鍵開關(guān)
1 串口母頭連接器
這些元器件按照如下的電路圖連接在一起。串口電壓范圍是+/- 10伏特。1.5K電阻適合于低電壓的LED,但是普通LED同樣適合。不推薦修改電阻器電壓和使用外部電源,因?yàn)榇诳刂菩酒侵靼宓囊徊糠郑坏┠銦似渲械男酒?,你只有修改整個(gè)主板。
上圖是實(shí)際的電路板樣品圖。最后的設(shè)備如文章開始圖片所示。
軟件
軟件部分是一個(gè)小的守護(hù)進(jìn)程。它可以通過/etc/rc.d/rc3.d/的腳本被啟動(dòng)。它通過使用ioctl(fd, TIOCMSET,…)和ioctl(fd, TIOCMGET, …)函數(shù)來讀取和寫串口。你可以從這里下載程序。軟件中包含一個(gè)Makefile和安裝指示。