Сприпт мониторинга и отключения питания

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Сприпт мониторинга и отключения питания

Сообщение nerve »

как всегда хочется странного.
по сути. надо мониторить ИБП, но ситуация такая, что NUT и APSUPSD не подходят по причине особенностей ОС.
зато изменение состояния ИБП с ПИТАНИЕ_ОТ_СЕТИ на ПИТАНИЕ_ОТ_БАТАРЕИ отслеживается и это изменение является триггером для запуска еще ненаписанного скрипта))
первоначально я хотел при переходе на батарею запускать скрипт, который бы отсчитывал нужное время, потом проверял не изменился ли статус на От_сети и если не изменился - то тушил комп.
но, ведь после изменение состояния с ПИТАНИЕ_ОТ_БАТАРЕИ на ПИТАНИЕ_ОТ_СЕТИ я могу передать параметр в уже запущенный скрипт с работающим счетчиком и прервать его, что выглядит более логичным, учитывая тот факт, что таким образом не будут запускаться лишние экземпляры скрипта, если до конца счетчика свет появится и пропадет заново.
вопрос собственно в том, как соединить счетчик и прием внешнего параметра.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сприпт мониторинга и отключения питания

Сообщение Bizdelnick »

kill
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Сприпт мониторинга и отключения питания

Сообщение nerve »

В общем вместо того, чтоб получать изменения статуса из вне, я запускаю скрипт по крону каждую минуту и дальше сам определяю что делать.
Если питание есть - то не делаем ничего, если питание пропало, создаем лок-файл, чтоб другие экземпляры скрипта по крону отваливались и запускаем 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
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Сприпт мониторинга и отключения питания

Сообщение Vascom »

Вместо if [ -f лучше использовать if [ -e
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Сприпт мониторинга и отключения питания

Сообщение SLEDopit »

У вас /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.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сприпт мониторинга и отключения питания

Сообщение Bizdelnick »

Чтобы такого не случалось, можно сохранять в lock-файле PID скрипта и проверять его работу при запуске. Гарантия, конечно, не 100%, но всяко лучше.
Другой вариант — не оставлять скрипт ждать, а просто запускать из него shutdown -t 300, а при последующих запусках, если питание восстановилось, делать shutdown -c. Отслеживать, запускался ли shutdown, можно, опять-таки, по файлу в /tmp (если что — от лишнего вызова shutdown -c вреда не будет).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сприпт мониторинга и отключения питания

Сообщение Bizdelnick »

Vascom писал(а):
09.03.2016 10:50
Вместо if [ -f лучше использовать if [ -e

Чем лучше?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Сприпт мониторинга и отключения питания

Сообщение nerve »

Vascom писал(а):
09.03.2016 10:50
Вместо if [ -f лучше использовать if [ -e

Код: Выделить всё

       -e FILE
              FILE exists

       -f FILE
              FILE exists and is a regular file

в чем разница?

SLEDopit писал(а):
09.03.2016 11:22
У вас /tmp очищается после ребута, я надеюсь.
В противном случае после первого отключения электричества и выключения компьютера скрипт перестанет работать.

да, у меня в бсд после ребута очищается. иначе - да, было бы забавно.

Bizdelnick писал(а):
09.03.2016 12:45
Чтобы такого не случалось, можно сохранять в lock-файле PID скрипта и проверять его работу при запуске. Гарантия, конечно, не 100%, но всяко лучше.
Другой вариант — не оставлять скрипт ждать, а просто запускать из него shutdown -t 300, а при последующих запусках, если питание восстановилось, делать shutdown -c. Отслеживать, запускался ли shutdown, можно, опять-таки, по файлу в /tmp (если что — от лишнего вызова shutdown -c вреда не будет).

спасибо, интересный вариант, попробую его использовать.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Сприпт мониторинга и отключения питания

Сообщение Vascom »

Разница в том, что надо проверить лишь существование файла. Так зачем плодить сущности и проверять ещё что это обычный файл?
Меньше работы системе, проще код. Использовать -e достаточно.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сприпт мониторинга и отключения питания

Сообщение Bizdelnick »

Vascom писал(а):
10.03.2016 09:37
Меньше работы системе, проще код.

Какой работы, два int сравнить? И в том, и в другом случае вызывается stat(), что намного более ресурсоёмкая операция. Которой, впрочем, тоже можно спокойно пренебречь по сравнению с накладными расходами на работу интерпретатора.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить