Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Русскоязычное Linux-сообщество ([info]lj_ru_linux)
@ 2012-11-15 10:09:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
pm-utils и софт для UPS (apcupsd, NUT) - SOLVED
Возвращаясь к напечатанному.

Если коротко: система SL6.3 (RHEL/CentOS6.3 по сути). Нужно, чтобы упс-монитор по истечении таймера/критическом разряде батарей не отрубал машину, а клал в гибернацию. Вроде все просто: для apcupsd предлагается создать кастом-скрипт под названием doshutdown, в котором прописан pm-hibernate. На деле же, такое впечатление, что apccontrol, управляемый apcupsd, начисто игнорирует doshutdown в том случае, если это _именно_скрипт_, лежащий в /etc/apcupsd (то есть тупо отправляет машину в шатдаун). Если же вместо скрипта завести симлинк на тот же самый скрипт, лежащий, скажем, в /usr/local/bin, то apccontrol его-таки обрабатывает, но безрезультатно. Сказать почему - сложно, в syslog лишь записи Капитана Очевидность, мол "Reached run time limit on batteries, initiating system shutdown!". Больше ничего не происходит.

Ладно, выкидываем apcupsd, ставим NUT (2.6.4). После настройки драйверов, юзеров (для upsmon там заводится юзер nut) и разруления прав на доступ к упс'ке, приступаем к кастомизации upsmon.conf. Казалось бы, для достижения желаемого результата, достаточно заменить
SHUTDOWNCMD "/sbin/shutdown -h +0"
на
SHUTDOWNCMD "/usr/sbin/pm-hibernate"

Однако при тесте shutdown-сценария (upsmon -c fsd), в syslog пишется:
Nov 15 18:15:15 HOSTNAME upsmon[6792]: Signal 10: User requested FSD
Nov 15 18:15:15 HOSTNAME upsd[6788]: Client nut@::1 set FSD on UPS [apc]
Nov 15 18:15:15 HOSTNAME upsmon[6792]: Executing automatic power-fail shutdown
Nov 15 18:15:15 HOSTNAME wall[6795]: wall: user nut broadcasted 2 lines (43 chars)
Nov 15 18:15:15 HOSTNAME upsmon[6792]: Auto logout and shutdown proceeding
Nov 15 18:15:15 HOSTNAME wall[6798]: wall: user nut broadcasted 1 lines (37 chars)
Nov 15 18:15:20 HOSTNAME upsmon[6791]: parent: Unable to call shutdown command: /usr/sbin/pm-hibernate

то есть так просто это не делается. Или делается не так. Или что-то с полиси и правами доступа. От отчаяния попробовал завести для юзера nut запись в sudoers и прописывал pm-hibernate через sudo -- с тем же результатом.

Гугление ничего не дало, во всех примерах рассматривается именно шатдаун, лишь в доках по NUT упоминается Suspend-to-disk как очень хороший способ, лучше чем шатдаун, очень крабе и рекомендуэ -- без какой-либо конкретики.

Конфиги NUT:
/etc/ups/ups.conf:
[apc]
driver = usbhid-ups
port = auto

/etc/ups/nut.conf:
MODE=standalone

/etc/ups/upsd.conf:
LISTEN 127.0.0.1 3493
LISTEN ::1 3493

/etc/ups/upsd.users:
[nut]
    password = somepassword
    upsmon master
    actions = SET
    instcmds = ALL

/etc/ups/upsmon.conf:
RUN_AS_USER nut
MONITOR apc@localhost 1 nut defupspasswd master
MINSUPPLIES 1
#SHUTDOWNCMD "/sbin/shutdown -h +0"
SHUTDOWNCMD "/usr/sbin/pm-hibernate"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOCOMMWARNTIME 300
FINALDELAY 5

Куда чинить?
Спасибо.

UPDATE: SOLVED!
В общем, пришлось сменить машину (как это пришлось? я сам сменил!), на новой - под SL6 не завелась риалтековская сетевушка. После тыканий по разным репам, SL был выброшен в пользу Бубунты-10.04.

Там apcupsd ведет себя как и ожидается, то есть молча выполняет все, что прописано в doshutdown (причем, именно в скрипте, а не симлинке на скрипт с гибернейтом), и даже вырубает упску (по --killpower) при хальте. Немного пришлось покурочить doshutdown и apccontrol (например, принудительно придушить демона перед гибернейтом -- иначе после пробуждения он первым делом порывался затушить машинку). Теперь при достижении 50% заряда apcupsd убивается, выводит пердупреждение, чтобы после пробуждения его запустили вручную, передается apcupsd --killpower, машинка уходит в гибернейт, после чего упска засыпает. Все!


(Читать комментарии) (Добавить комментарий)