NUT UPS: остановка определенной службы при сбое питания
Кто-нибудь знает, как остановить службу при сбое питания с помощью NUT?
Я сделал такой скрипт, проблема в том, что у пользователя скрипта (NUT) нет прав root для остановки службы.
Я хочу остановить boinc-клиент сразу после сбоя питания, чтобы я не разряжал батареи и не запускал генератор до того, как это действительно необходимо.
#! /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
2 ответа
Это выглядит просто отлично.
У вас есть два варианта, один лучше, чем другой.
Первый и лучший вариант - использовать sudo. Разрешите неинтерактивному nopasswd sudo для пользователя, от имени которого выполняется сценарий (укажите путь к сценарию в качестве разрешенной команды), и введите sudo
перед командой остановки.
Другой вариант - использовать разрешения Unix. Убедитесь, что владельцем скрипта является root, а его группа - это то, к чему у работающего пользователя есть доступ (возможно, вам придется создать новую группу). Сделайте это suid, предоставьте исполняемый доступ группе, и все готово (но убедитесь, что у группы нет прав на запись, иначе у вас будет уязвимость безопасности).
У вас может быть задание cron с правами root, которое проверяет файл /tmp/poweroutage каждые 10 секунд и уничтожает boinc, как только вы его видите. Я согласен, что работа над разрешениями может быть предпочтительнее.