Назад | Перейти на главную страницу

NUT UPS: остановите определенную службу при сбое питания

Кто-нибудь знает, как остановить службу при сбое питания с помощью NUT?
Я создал подобный собственный сценарий, проблема в том, что пользователь сценария (NUT) не имеет прав root для остановки службы.
Я хочу остановить boinc-client сразу после сбоя питания, чтобы не разряжать батареи и не запускать генератор до того, как это действительно необходимо.

#! /bin/bash
# UPS notify script.

if [$NOTIFYTYPE == "ONBATT"]
then

    /etc/init.d/boinc-client stop
fi

/usr/bin/mail -s "UPS '$UPSNAME': $NOTIFYTYPE" bla@shee.com <<END
$*
END

Это выглядит прекрасно.

У вас есть два варианта, один лучше другого.

Первый и лучший вариант - использовать sudo. Разрешить неинтерактивное nopasswd sudo для пользователя, от имени которого запущен сценарий (укажите путь к сценарию в качестве разрешенной команды), и вставьте sudo перед командой остановки.

Другой вариант - использовать разрешения unix. Убедитесь, что владельцем сценария является root, а его группа - это то, к чему запущенный пользователь имеет доступ (возможно, вам придется создать новую группу). Сделайте это suid, предоставьте группе доступ на выполнение, и все готово (но убедитесь, что у группы нет доступа на запись, иначе у вас будет уязвимость в системе безопасности).

У вас может быть задание cron с проверкой прав root для файла / tmp / poweroutage каждые 10 секунд и убить boinc, как только вы его увидите. Я согласен, что работа с разрешениями может быть предпочтительнее.