Как то отключали электричество, и я столкнулся с любопытной проблемой, бесперебойник разрядился и выключил компьютер, но при возобновление подачи электроэнергии компьютер не включился, а я ведь был на 100% уверен, что у меня все настроено правильно. Ковыряния
BIOS и гугление вопроса выдало мне, что многие материнки десктопных умеют только в
Restore on AC Power Loss =
Last state(последние состояние), то есть, если бесперебойник аккуратно выключает компьютер, то
Last State у нас
Off(Выключенный). Давайте сделаем, так, что бы наш компьютер аккуратно завершил все службы, и как бы перешел в состояние
halt, и когда отключиться бесперебойник(а он отключится через несколько секунд после достижения
halt) у нас будет
Last State равный On
Первое, что нам нужно сделать, это выставить в
BIOS:
Restore on AC Power Loss = Last State
, теперь устанавливаем
apcupsd pacman -S apcupsd
и приступаем к настройке:
/etc/apcupsd/apcupsd.conf
#Имя упса, если делаете все для десктопа, то особо не важно, что вы тут понапишите
UPSNAME APC
#Тип кабеля, надеюсь у вас usb
UPSCABLE usb
#И вновь usb
UPSTYPE usb
#Это директива в принципе не нужна, если мы используем usb
DEVICE
#Период опрос упса в секундах
#POLLTIME 60
#Расположение lock файла
LOCKFILE /var/lock/
#Директория где располагаются скрипты
SCRIPTDIR /etc/apcupsd
#Директория где будет создан flag файл, обозначающий сбой питания
PWRFAILDIR /etc/apcupsd
# NOLOGINDIR <path to nologin directory>
NOLOGINDIR /etc
#Задержка между обнаружением сбоя электропитания и отсылкой события onbattery
ONBATTERYDELAY 10
#Уровень заряда батареи при котором будет послал сигнал выключения компьютеру
BATTERYLEVEL 15
#Оставшееся время работы компьютера при котором будет инициализировано выключение
MINUTES 4
# Задержка после которой начнется выключение компьютера, 0 - отключено
TIMEOUT 0
# Таймаут об оповещение пользователей
ANNOY 300
# Задержка перед сбоем
ANNOYDELAY 60
# The condition which determines when users are prevented from
# logging in during a power failure.
# NOLOGON <string> [ disable | timeout | percent | minutes | always ]
NOLOGON disable
#задержка перед отключение бесперебойника после инициализации выключения компьютера
KILLDELAY 0
Остальные параметры не критичны. Теперь нам надо отредактировать скрипт выключения компьютера. Открываем файлик и находим там следующее
/etc/apcupsd/apccontrol
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
;;
и меняем на:
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
${SHUTDOWN} -H now "apcupsd UPS ${2} initiated shutdown"
;;
Теперь при инициализации выключения компьютера, он будет переходить в режим
halt.
Кстати проверить есть ли связь с бесперебойником можно командой
apctest
.
Так остался еще один момент, это отключение самого бесперебойника, в этом нам поможет
systemd.
Создаем файл со следующимм содержанием:
/lib/systemd/system-shutdown/apcupsd.shutdown
#!/bin/sh
if [ -f /etc/apcupsd/powerfail ]; then
echo
echo "APCUPSD will now power off the UPS"
echo
/etc/apcupsd/apccontrol killpower
fi
Не забываем включить и запустить службу
apcupsd systemctl enable apcupsd.service && systemctl start apcupsd.service
Вот вроде бы и все, всем безопасных выключений.
P.S.: Вдруг у вас бесперебойник использует
Сom порт, и c
Apcupsd ничего не вышло посмотрите в сторону
nut.
Комментарии ()