停電後UPS自動關閉Linux服務器腳本

便宜的UPS沒有檢測的端口, 斷電後需要人工干預,去關掉服務器。這段腳本可以自動的檢測斷電,並關閉服務器。 本腳本只支持Linux系統。

工作原理

工作時需要一個參照設備, 參照設備需要有IP地址, 同時連接在UPS系統外部。斷電後會失去IP地址,服務器ping不通就會在規定的時間內自動關機。

crontab定時設置

必須要設置成root的crontab,其他用戶沒有關機的權限

1
2
# m h  dom mon dow   command
* * * * * /root/detect_ups.sh >> /var/log/detect_ups.log
  • * * * * * 表示每分鐘檢測一次
  • /root/detect_ups.sh 表示你的腳本的所在位置

檢測腳本

/root/detect_ups.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash 

me="$(basename "$0")";
running=$(ps h -C "$me" | grep -wv $$ | wc -l);
[[ $running > 1 ]] && exit;

detect_ip=192.168.1.1
ping_count=1
detect_delay=300
echo " detect ip:=$detect_ip"
echo " detect delay:=$detect_delay sec"

ping -c ${ping_count} ${detect_ip} > /dev/NULL
if [ $? -eq 0 ]
then
    echo ' AC Power OK !'
else
    echo " AC Power maybe off, checking again after ${detect_delay} second !"
    sleep ${detect_delay}  #延時秒
    ping -c ${ping_count} ${detect_ip} > /dev/NULL
    if [ $? -eq 0 ]
    then
        echo ' AC Power recover, return !'
    else
        echo ' AC Power always off, poweroff !'
        /usr/sbin/poweroff
    fi
fi
记录并分享
Built with Hugo
Theme Stack designed by Jimmy