สั่งปิดลีนุกซ์เมื่อไฟดับด้วย APC UPS

ช่วงฝนตก ฟ้าร้อง อุปกรณ์สำคัญที่จำเป็นอย่างยิ่งสำหรับเครื่องคอมพิวเตอร์หรือเซิร์ฟเวอร์ ก็คืออุปกรณ์สำรองไฟ หรือ UPS เพื่อป้องกันเหตุการณ์ไฟตก ไฟกระชาก หรือไฟดับ

แต่ถ้าไฟดับเป็นระยะเกินกว่าแบตเตอรีของ UPS จะจ่ายไฟที่สำรองไว้ได้ ก็จะทำให้เครื่องเซิรฟ์เวอร์ดับไปอยู่ดี ซึ่งอาจส่งผลให้ข้อมูลในเครื่องเสียหายได้

เพื่อความปลอดภัยของข้อมูลในเครื่อง แนะนำให้ลงทุนซื้อ UPS ที่สามารถสั่งปิด (shutdown) เครื่อง เมื่อเกิดเหตุไฟดับได้

ถ้าแบบที่หาซื้อได้ตามร้านค้าทั่วไป ก็ให้เลือก UPS ที่มีพอร์ต USB ต่อสายเข้าเครื่องคอมพิวเตอร์ได้ และถ้าต้องการให้สั่งปิด (shutdown) ลีนุกซ์ได้ ก็ต้องเลือกรุ่นที่มีโปรแกรมหรือไดร์เวอร์รองรับบนลีนุกซ์

ในที่นี้จะใช้ APC UPS ที่มีสาย USB ต่อเข้ากับเครื่องที่รันลีนุกซ์ CentOS 6 แล้วติดตั้งโปรแกรม apcupsd เพื่อคอนฟิกสั่งปิดเครื่องเมื่อไฟดับแล้วเหลือแบตเตอรีถึงค่าที่กำหนดได้

หมายเหตุ ผู้เขียนไม่มีความเกี่ยวข้องหรือต้องการโฆษณาผลิตภัณฑ์ของบริษัท APC UPS แต่อย่างใด

เปิด UPS แล้วเสียบสาย USB จาก UPS เข้าเครื่องเซิรฟ์เวอร์ที่ติดตั้ง CentOS 6

ถ้าลีนุกซ์มองเห็นหรือมีไดร์เวอร์ของ UPS ที่ต่อผ่านสาย USB จะมีข้อความตามตัวอย่างด้านล่างในไฟล์ /var/log/messages

[root@server ~]# tail -f /var/log/messages
Jun 8 11:48:18 server kernel: usb 2-3: new low speed USB device number 4 using xhci_hcd
Jun 8 11:48:18 server kernel: usb 2-3: New USB device found, idVendor=0.., idProduct=0002
Jun 8 11:48:18 server kernel: usb 2-3: New USB device strings: Mfr=3, Product=1, SerialNumber=2
Jun 8 11:48:18 server kernel: usb 2-3: Product: Back-UPS XS 950U FW:... .I USB FW:T2
Jun 8 11:48:18 server kernel: usb 2-3: Manufacturer: American Power Conversion
Jun 8 11:48:18 server kernel: usb 2-3: SerialNumber: ...
Jun 8 11:48:18 server kernel: usb 2-3: configuration #1 chosen from 1 choice
Jun 8 11:48:18 server kernel: usb 2-3: ep 0x81 - rounding interval to 64 microframes, ep desc says 80 microframes
Jun 8 11:48:19 server kernel: generic-usb 0000:....: hiddev96,hidraw2: USB HID v1.10 Device [American Power Conversion Back-UPS XS 950U FW:.... .I USB FW:T2 ] on usb-0000:00:14.0-3/input0

ติดตั้งแพ็คเกจ epel-release

[root@server ~]# yum install epel-release

ติดตั้งแพ็คเกจ apcupsd

[root@server ~]# yum install apcupsd

รันเซอร์วิส apcupsd

[root@server ~]# service apcupsd start
Starting UPS monitoring:       [ OK ]

หลังจากรันเซอร์สิส apcupsd แล้ว จะสามารถรันคำสั่ง apcaccess เพื่อดูข้อมูลรายละเอียด สถานะของ UPS ที่เชื่อมต่อได้

[root@server ~]# apcaccess
APC      : 001,036
DATE     : 2016-06-08 11:54:10 +0700
HOSTNAME : server.example.com
VERSION  : 3.14.12 (29 March 2014) redhat
UPSNAME  : server.example.com
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2016-06-08 11:54:08 +0700
MODEL    : Back-UPS XS 950U
STATUS   : ONLINE
LINEV    : 226.0 Volts
LOADPCT  : 0.0 Percent
BCHARGE  : 88.0 Percent
TIMELEFT : 281.6 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 155.0 Volts
HITRANS  : 280.0 Volts
ALARMDEL : 30 Seconds
BATTV    : 13.4 Volts
LASTXFER : Unacceptable line voltage changes
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : ...
BATTDATE : 2015-12-22
NOMINV   : 230 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 480 Watts
FIRMWARE : .... .I USB FW:T2
END APC  : 2016-06-08 11:54:18 +0700

สถานะ (STATUS: ONLINE) คือมีไฟเข้า UPS ปกติ

จำลองสถานการณ์ไฟดับ ด้วยการดึงปลั๊กไฟ UPS ที่ต่อเข้ากับระบบไฟหลัก

เซอร์วิส apcupsd จะตรวจจับได้ว่าระบบไฟหลักมีปัญหา (Power failer) และตอนนี้ UPS ใช้แบตเตอรีเพื่อจ่ายไฟอยู่ (Running on UPS batteries)

[root@server ~]# tail -f /var/log/messages
Jun 8 12:02:47 server apcupsd[1699]: Power failure.
Jun 8 12:02:53 server apcupsd[1699]: Running on UPS batteries.
Jun 8 12:02:53 server wall[1767]: wall: user root broadcasted 1 lines (67 chars)

โดยคอนฟิกดีฟอลต์ ถ้าเกิดไฟดับ เซอร์วิส apcupsed จะสั่ง shutdown ลีนุกซ์โดยอัตโนมัติ เมื่อเกิดเหตุการณ์ใดก่อนดังนี้

  • แบตเตอรีเหลือกำลังไฟแค่ 5% (BATTERYLEVEL 5)
  • แบตเตอรีสามารถจ่ายไฟได้อีก 3 นาที (MINUTES 3)

ตัวอย่างไฟล์คอนฟิกหลักของ apcupsd

[root@server ~]# vi /etc/apcupsd/apcupsd.conf
...
# If during a power failure, the remaining battery percentage
# (as reported by the UPS) is below or equal to BATTERYLEVEL,
# apcupsd will initiate a system shutdown.
BATTERYLEVEL 5

# If during a power failure, the remaining runtime in minutes
# (as calculated internally by the UPS) is below or equal to MINUTES,
# apcupsd, will initiate a system shutdown.
MINUTES 3

สามารถตรวจสอบค่าทั้งสองได้จากคำสั่ง apcaccess

ตัวอย่างสถานะ UPS เมื่อเกิดไฟดับ

[root@server ~]# apcaccess
...
STATUS   : ONBATT
LINEV    : 0.0 Volts
LOADPCT  : 0.0 Percent
BCHARGE  : 64.0 Percent
TIMELEFT : 12.6 Minutes
...

สังเกตว่าบรรทัด STATUS จะเปลี่ยนจาก ONLINE เป็น ONBATT เพื่อแสดงว่าตอนนี้ UPS ใช้แบตเตอรีจ่ายไฟให้เครื่องคอมพิวเตอร์อยู่

เมื่อแบตเตอรีเหลือกำลังไฟที่กำหนด เช่น

TIMELEFT : 3.0 Minutes

เซอร์วิส apcupsd จะสั่งปิดเครื่อง

ตัวอย่างข้อความที่แสดง เมื่อเซอร์วิส apcupsd สั่ง shutdown

Broadcast message from root@server.example.com (Wed Jun 8 12:15:07 2016):

Remaining battery runtime below limit on UPS server.example.com. Doing shutdown.

Broadcast message from root@server.example.com (Wed Jun 8 12:15:07 2016):

UPS server.example.com initiated Shutdown Sequence

Broadcast message from root@server.example.com
    (unknown) at 12:15 ...

The system is going down for halt NOW!
apcupsd UPS server.example.com initiated shutdown

ลองนำไปใช้กันดูครับ

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.