Сприпт мониторинга и отключения питания
Модераторы: /dev/random, Модераторы разделов
Сприпт мониторинга и отключения питания
как всегда хочется странного.
по сути. надо мониторить ИБП, но ситуация такая, что NUT и APSUPSD не подходят по причине особенностей ОС.
зато изменение состояния ИБП с ПИТАНИЕ_ОТ_СЕТИ на ПИТАНИЕ_ОТ_БАТАРЕИ отслеживается и это изменение является триггером для запуска еще ненаписанного скрипта))
первоначально я хотел при переходе на батарею запускать скрипт, который бы отсчитывал нужное время, потом проверял не изменился ли статус на От_сети и если не изменился - то тушил комп.
но, ведь после изменение состояния с ПИТАНИЕ_ОТ_БАТАРЕИ на ПИТАНИЕ_ОТ_СЕТИ я могу передать параметр в уже запущенный скрипт с работающим счетчиком и прервать его, что выглядит более логичным, учитывая тот факт, что таким образом не будут запускаться лишние экземпляры скрипта, если до конца счетчика свет появится и пропадет заново.
вопрос собственно в том, как соединить счетчик и прием внешнего параметра.
по сути. надо мониторить ИБП, но ситуация такая, что NUT и APSUPSD не подходят по причине особенностей ОС.
зато изменение состояния ИБП с ПИТАНИЕ_ОТ_СЕТИ на ПИТАНИЕ_ОТ_БАТАРЕИ отслеживается и это изменение является триггером для запуска еще ненаписанного скрипта))
первоначально я хотел при переходе на батарею запускать скрипт, который бы отсчитывал нужное время, потом проверял не изменился ли статус на От_сети и если не изменился - то тушил комп.
но, ведь после изменение состояния с ПИТАНИЕ_ОТ_БАТАРЕИ на ПИТАНИЕ_ОТ_СЕТИ я могу передать параметр в уже запущенный скрипт с работающим счетчиком и прервать его, что выглядит более логичным, учитывая тот факт, что таким образом не будут запускаться лишние экземпляры скрипта, если до конца счетчика свет появится и пропадет заново.
вопрос собственно в том, как соединить счетчик и прием внешнего параметра.
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Сприпт мониторинга и отключения питания
kill
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Сприпт мониторинга и отключения питания
В общем вместо того, чтоб получать изменения статуса из вне, я запускаю скрипт по крону каждую минуту и дальше сам определяю что делать.
Если питание есть - то не делаем ничего, если питание пропало, создаем лок-файл, чтоб другие экземпляры скрипта по крону отваливались и запускаем 5-минутный цикл в котором раз в минуту проверяем не вернулось ли питание. если по истечении 5 минут питания нет - тушим сервак.
Если питание есть - то не делаем ничего, если питание пропало, создаем лок-файл, чтоб другие экземпляры скрипта по крону отваливались и запускаем 5-минутный цикл в котором раз в минуту проверяем не вернулось ли питание. если по истечении 5 минут питания нет - тушим сервак.
Код: Выделить всё
#!/bin/sh
if [ -f /tmp/powerout.lock ]; then
exit 0
fi
ACstatus () {
sysctl hw.sensors.upd0.indicator2 | cut -c28-29 | grep -q "On" > /dev/null
}
i=0
if ACstatus ; then
exit 0
else
logger -t UPS "AC has been disconnected"
touch /tmp/powerout.lock
/usr/local/bin/mutt -s "Power outage in office" -- admin@example.com < /root/powerout
while [ $i -lt "360" ]
do
i=$((i+60))
sleep 60
if ACstatus ; then
logger -t UPS "AC has been connected again after ${i} seconds."
/usr/local/bin/mutt -s "Power returned in office" -- admin@example.com
rm -rf /tmp/powerout.lock
exit 0
else
if [ "$i" -eq "300" ]; then
/usr/local/bin/mutt -s "No power for 5 min. System is shutting down now." -- admin@example.com
shutdown -hp +0
fi
fi
done
fi
Re: Сприпт мониторинга и отключения питания
Вместо if [ -f лучше использовать if [ -e
Re: Сприпт мониторинга и отключения питания
У вас /tmp очищается после ребута, я надеюсь.
В противном случае после первого отключения электричества и выключения компьютера скрипт перестанет работать.
В противном случае после первого отключения электричества и выключения компьютера скрипт перестанет работать.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Сприпт мониторинга и отключения питания
Чтобы такого не случалось, можно сохранять в lock-файле PID скрипта и проверять его работу при запуске. Гарантия, конечно, не 100%, но всяко лучше.
Другой вариант — не оставлять скрипт ждать, а просто запускать из него shutdown -t 300, а при последующих запусках, если питание восстановилось, делать shutdown -c. Отслеживать, запускался ли shutdown, можно, опять-таки, по файлу в /tmp (если что — от лишнего вызова shutdown -c вреда не будет).
Другой вариант — не оставлять скрипт ждать, а просто запускать из него shutdown -t 300, а при последующих запусках, если питание восстановилось, делать shutdown -c. Отслеживать, запускался ли shutdown, можно, опять-таки, по файлу в /tmp (если что — от лишнего вызова shutdown -c вреда не будет).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Сприпт мониторинга и отключения питания
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Сприпт мониторинга и отключения питания
Код: Выделить всё
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
в чем разница?
да, у меня в бсд после ребута очищается. иначе - да, было бы забавно.
Bizdelnick писал(а): ↑09.03.2016 12:45Чтобы такого не случалось, можно сохранять в lock-файле PID скрипта и проверять его работу при запуске. Гарантия, конечно, не 100%, но всяко лучше.
Другой вариант — не оставлять скрипт ждать, а просто запускать из него shutdown -t 300, а при последующих запусках, если питание восстановилось, делать shutdown -c. Отслеживать, запускался ли shutdown, можно, опять-таки, по файлу в /tmp (если что — от лишнего вызова shutdown -c вреда не будет).
спасибо, интересный вариант, попробую его использовать.
Re: Сприпт мониторинга и отключения питания
Разница в том, что надо проверить лишь существование файла. Так зачем плодить сущности и проверять ещё что это обычный файл?
Меньше работы системе, проще код. Использовать -e достаточно.
Меньше работы системе, проще код. Использовать -e достаточно.
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Сприпт мониторинга и отключения питания
Какой работы, два int сравнить? И в том, и в другом случае вызывается stat(), что намного более ресурсоёмкая операция. Которой, впрочем, тоже можно спокойно пренебречь по сравнению с накладными расходами на работу интерпретатора.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |