Кто-нибудь знает, как остановить службу при сбое питания с помощью 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, как только вы его увидите. Я согласен, что работа с разрешениями может быть предпочтительнее.