LINUX.ORG.RU

Выключение сервера CentOS 7.3 посредством NUT

 ,


0

3

Здравствуйте.

Настроил NUT на сервере по управлением CentOS 7.3. При пропадании питания сервер должен выключаться через N-секунд. Всё настроено корректно. Счетчик включается. Тикает. По завершении счетчика, запускается, как положено, скрипт upssched-cmd. Все команды (логирование) в нем выполняются, кроме самой команды на завершение работы.

Логи

upsmon: UPS ippon@localhost on battery
wall[7278]: wall: user nut broadcasted 1 lines (32 chars)
upssched[7281]: Timer daemon started
upssched[7281]: New timer: onbatt (20 seconds)
upsmon: Network UPS Tools upsmon 2.7.2
upssched-cmd: 60 seconds on battary - halt system and poweroff UPS after 5 min
upssched[7281]: Timer queue empty, exiting

Скрипт upssched-cmd

case "$1" in
        onbatt)
                logger -t upssched-cmd "60 seconds on battary - halt system and poweroff UPS after 5 min"
                /usr/bin/sudo /usr/bin/shutdown -h +0
                ;;
        upsgone)
                logger -t upssched-cmd "The UPS has been gone for awhile"
                ;;
        *)
                logger -t upssched-cmd "Unrecognized command: $1"
                ;;
esac

Пользователя nut занес в sudoers, чтобы имел право на выключение

nut localhost=NOPASSWD: /usr/bin/shutdown

Если запускаешь этот скрипт upssched-cmd в консоли от пользователя nut, то система выключается, как положено. Но почему-то не при исполнении его через NUT.

Есть подозрение, что это дело рубится каким-нибудь systemd или selinux, но не хватает знаний. Когда тестирую это дело - выключаю UPS из розетки - то залогинена еще пара терминалов root для мониторинга логов. Может в этом дело?

Буду рад помощи. Спасибо.


Попробуй вместо +0now или экранируй свой плюс.

Вообще, если у тебя там systemd, то даже sudo не нужно, у меня выключает без проблем.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Вообще, если у тебя там systemd, то даже sudo не нужно, у меня выключает без проблем.

Только в локальной интерактивной сессии.

anonymous
()
Ответ на: комментарий от r3lgar

Пробовал. Не в этом причина. Опять же, если залогиниться под nut'ом и запустить скрипт, то всё выключается.

Есть подозрение, что это polkit рубит именно удаленное выполнение shutdown-команды. Но для меня это тёмный лес.

Linux такая дружелюная ОС. Реально сутки уже рублюсь. Сначало бился с запуском NUT. Ментейнеры вообще положили на пакет. То временные файлы не в том месте создаются. То PID-файлы вообще не создаются. То в udev прописана какая-то левая группа dialout, а не nut. И вот теперь уже, окончательный РУБЕЖ!!!

roiman
() автор топика
Ответ на: комментарий от roiman

Да вроде sudo должно быть достаточно.

То в udev прописана какая-то левая группа dialout, а не nut

Это не ошибка, UPS часто подключаются через COM-порт.

anonymous
()
Ответ на: комментарий от anonymous

Я не совсем корректно написал. «Левая» для этого драйвера (USB). Понятно, что dialout для COM. Непонятно, почему драйверам (и COM, и USB) нужна группа на устройства nut, а в правилах прописана dialout.

roiman
() автор топика

/usr/bin/shutdown

Оно разве не в sbin? И вообще, в 7 центоси shutdown - симлинк на systemctl, можешь попробовать напрямую через него выключать, systemctl poweroff.

Deleted
()
Ответ на: комментарий от Deleted

Я знаю про симлинк. Уже все варианты перебробовал - и через shutdown, и poweroff, и systemctl poweroff. Путь к sudo тоже проверил - лежит.

Повторюсь, выполнение скрипта интерактивно в консоли от пользователя nut, под которым это дело запускается в NUT, происходит корректно. То есть ошибок в нём нет.

Тут что-то другое... systemctl stop polkit не дало результатов.

roiman
() автор топика
Ответ на: комментарий от r3lgar

systemd пробовал. В данном случае это выглядит как запрос от PolicyKit, а его я настраивать точно не хочу.

anonymous
()
Ответ на: комментарий от anonymous

как запрос от PolicyKit, а его я настраивать точно не хочу.

Там всего один xml-файл поправить. (% Правда, уже не скажу какой и где он лежит.

r3lgar ★★★★★
()

Может кто подскажет, как локализовать проблему, направление её источника? Ну, вот выполнился скрипт, команда в нём и тишина - в /var/log/messages ничего про её выполнение или ошибку выполнения...

roiman
() автор топика

У меня в федоре в /etc/ups/upsmon.conf

SHUTDOWNCMD "/sbin/shutdown -h +0"
и всё шатдаунится.

Алсо у sudo есть такая особенность: являясь в первую очередь интерактивным иструментом он по умолчанию явно проверяет наличие терминала и не работает без него (т.е. из демонов). В этом может быть проблема.

А для тестирования есть upsmon -c fsd и можно не тратить ресурс батарей.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

У меня в федоре в /etc/ups/upsmon.conf
SHUTDOWNCMD «/sbin/shutdown -h +0»
и всё шатдаунится.

Это был мой самый 1-ый вариант. Я уже всё перепробовал. И пользователя проверил через whoami, когда скрипт выполняется. И создал нормального, не системного, пользователя и от него запускал. Хоть тресни, не запускается шатдаун.

А для тестирования есть upsmon -c fsd и можно не тратить ресурс батарей.

Отрабатывает, как и должно, если запустить интерактивно - сервак вырубается.

Так или иначе, спасибо за ответ.

P.S. Еще подумал, может ты сможешь выслать свои конфиги? Содержимое /etc/ups. Юниты nut-driver.service, nut-server.service и nut-monitor. Скрипт, который запускается после срабатывания счетчика (upssched-cmd). Всё-таки красношляпа. Должно же одинаково работать, не рубится в этом месте. Может дело в настройках, и просто не вижу. Был бы признателен. Адрес roiman собака rumbler.ru

roiman
() автор топика
Ответ на: комментарий от legolegs

Спасибо. Всё равно, на всякий случай посмотрю.

roiman
() автор топика
$ cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core) 

$ ls /usr/bin/shutdown
ls: cannot access /usr/bin/shutdown: No such file or directory

$ ls /usr/sbin/shutdown 
/usr/sbin/shutdown

Deleted
()
Ответ на: комментарий от Deleted

Я проверил все пути к исполняемым файлам по 10 раз. Скрипт отрабатывает как положено, если его запустить интерактивно. Неужели бы я не увидел бы такую простую ошибку...

Что-то другое здесь... Проблема так и висит нерешённой.

roiman
() автор топика
15 сентября 2018 г.
Ответ на: комментарий от roiman

Я не совсем корректно написал. «Левая» для этого драйвера (USB).

Вопрос на засыпку: а команда на отключение подаётся до или после остановки udev и отключения USB?

AS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.