歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux服務 >> 通過串口關閉Linux服務器

通過串口關閉Linux服務器

日期:2017/2/25 10:37:09   编辑:Linux服務

 簡介

  一個真正的服務器一般往往不需要連接鍵盤、顯示器或鼠標等外設。而僅僅需要一個性能穩定的操作系統如Linux和一個網卡。諸如鼠標、鍵盤等外部設備則往往不必要連接。在運行Linux的機器上,通過網絡進行遠程管理是最好和最方便的解決方法。

  在買服務器時應該確保在開機BIOS中有設定不需要檢測鍵盤的選項。目前市場上大多數主板廠商的BIOS版本都有這樣的選項。但是仍然有一些主板認為自己的的服務器將只運行windows,因此一定會在啟動時需要一個鍵盤,因此不推薦使用這種機器作為服務器使用。

  沒有鍵盤和監視器的計算機非常適合於作為防火牆、web服務器、NFS服務器、郵件服務器的、ADSL網關、DNS服務器的概念等等。而且該機器不一定是功能非常強大的機器。即使一個老的Pentimu100機器,只要擁有足夠的內存就可以同時服務數百個客戶服務請求。

  服務器不連接鍵盤、鼠標和顯示器的好處是非常方便,因為服務器將只是一個簡單的主機箱,可以放在任何適合的地方。但有時候你可能希望能有一個按鍵來實現安全的關閉服務器而無需首先遠程登錄服務器運行shutdown命令來實現關閉機器。也可能你現在就在服務器機房,而最近的工作站離你有100多米遠;或者你希望某個沒有root密碼的普通用戶關閉服務器。當然直接關閉電源並不是一個好的想法,因為這樣可能導致丟失數據並且在下次啟動時需要很長時間的文件系統檢測。

  解決方法是按照本文的方法安裝一個很小的、便宜的串口設備實現安全關機。

  設備

  我們將制作一個小小的、由兩個LED和一個按鍵式開關組成的設備。其中綠色的LED亮表示當前按鍵式開關是處於激活狀態,緩慢閃爍的黃色LED燈表示服務器正在啟動或者仍然處於關閉狀態。為了實現安全關閉服務器需要持續按下開關3秒鐘。

  如果你按了按鍵開關,亮著的綠色的LED將熄滅,表示正在關機,這時候命令"/sbin/shutdown -t2 -h now"被執行。在服務器關閉過程中黃色的LED將連續閃爍以進行指示。當黃色LED不再閃爍時,你仍然需要等待10秒鐘才能關閉服務器電源。當所有的進程被殺掉,磁盤被卸載以後黃色LED將不再閃爍。若你的服務器支持自動關機則你不需要考慮10秒的等待時間,因為服務器會自動關閉電源。

  串口

  關於串口令人感興趣的是我們可以通過ioctl系統調用來控制其中的幾個管腳。這意味著你不需要修改任何內核代碼就可以控制連接到串口的LED或這讀取按鍵式開關的狀態。串口有足夠的電壓來驅動兩個低電壓LED。我們將使用RTS和DTR針來連接LED,並且"Carrier Detect line"被用來讀取按鍵開關的狀態。

  串口母頭連接器的管腳定義:

  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

  電路

  用戶需要下面元器件來制作這個串口關機設備:

  1 綠色低電壓LED (一個普通LED同樣可以工作,但是亮燈過低)

  1 黃色低電壓LED

  2 1.5K歐姆的電阻

  1 6.8K歐姆的電阻

  1 小按鍵開關

  1 串口母頭連接器

  這些元器件按照如下的電路圖連接在一起。串口電壓范圍是+/- 10伏特。1.5K電阻適合於低電壓的LED,但是普通LED同樣適合。不推薦修改電阻器電壓和使用外部電源,因為串口控制芯片是主板的一部分,一旦你燒了其中的芯片,你只有修改整個主板。

  軟件

  軟件部分是一個小的守護進程。它可以通過/etc/rc.d/rc3.d/的腳本被啟動。它通過使用ioctl(fd, TIOCMSET,…)和ioctl(fd, TIOCMGET, …)函數來讀取和寫串口。你可以從這裡下載程序。軟件中包含一個Makefile和安裝指示。

Copyright © Linux教程網 All Rights Reserved