Executa vários comandos do shell quando o NUT reporta uma bateria fraca no no-break

4

Em um servidor Debian eu instalei com sucesso o pacote nut para que o status do meu Ellipse PRO 1200 possa ser buscado via USB ( upsc my-ups retorna o nível da bateria).

Nota: Eu não testei o que acontecerá quando uma queda de energia ocorrer ainda.

Esta UPS serve energia para outros dispositivos que não este servidor Debian: alguns roteadores / switches e um NAS.

Neste caso, considerando como eu acho que o NUT funciona, eu devo instalar o NUT no NAS e declará-lo como NUT slave, desta forma o servidor Debian (NUT master) ordenaria que o NAS desligasse quando a bateria estivesse fraca e então desligue-se.

O problema é que não consigo instalar o NUT no NAS (o sistema operacional não é suportado), mas posso enviar o SSH para ele e dizer ao desligamento.

Como / onde posso colocar meu (s) próprio (s) script (s) juntamente com o que o NUT normalmente executaria para ordenar que o escravo seja desligado?

O único lugar que eu pude encontrar é SHUTDOWNCMD no arquivo /etc/nut/upsmon.conf :

SHUTDOWNCMD "/sbin/shutdown -h +0"

Eu estou supondo que eu poderia substituir esse comando por um script feito à mão que executaria o comando shutdown SSH e terminaria com o desligamento do servidor Debian também.

O problema é SHUTDOWNCMD parece ser destinado a ações da última vez: quando a bateria está muito baixa. Entrar em contato com todos os outros dispositivos em meu próprio script pode levar mais tempo do que eu antes de ficar sem bateria.

Obrigado

    
por CDuv 29.10.2014 / 12:35

2 respostas

3

Você pode tentar usar upssched.conf(5) para executar seu próprio script em um timer depois que um evento for disparado.

Um upssched.conf básico seria algo assim:

CMDSCRIPT /bin/your-script.sh
AT ONBATT * EXECUTE emailonbatt
AT ONBATT * START-TIMER upsonbatt 300
AT ONLINE * EXECUTE emailonline
AT ONLINE * CANCEL-TIMER upsonbatt upsonline

Com isso, o NUT irá:

  • Imediatamente após o no-break entrar em funcionamento, execute /bin/your-script.sh emailwarn .
  • Cinco minutos após o no-break entrar em funcionamento, execute /bin/your-script.sh upsonbatt .
  • Imediatamente após o no-break recuperar a energia da linha, execute /bin/your-script.sh upsonline .
  • Imediatamente após o no-break recuperar a energia da linha, cancele também o temporizador upsonbatt se ainda estiver ativo. Caso contrário, execute /bin/your-script.sh upsonline .

O script pode ser algo como:

#!/bin/bash
case $1 in
        emailonbatt)
                  mail -s "UPS on battery power" [email protected]
                  ;;
        emailonline)
                  mail -s "UPS on line power" [email protected]
                  ;;
        upsonbatt)
                  ssh root@nas shutdown -h +0
                  ;;
        upsonline)
                  etherwake 01:23:45:AB:CD:EF
                  ;;
esac

A sintaxe da instrução AT pode ser encontrada na página man de upssched.conf(5) , e os tipos de eventos de notificação disponíveis podem ser encontrados na página man de upsmon(8) .

    
por 08.05.2015 / 12:20
1

o que você está tentando fazer (usar um gancho pré-estabelecido) é a abordagem mais elegante.

Mas quando isso não é possível porque não há gancho ou os que não atendem às suas necessidades, uma abordagem de pesquisa também é uma opção.

Você pode monitorar a saída dos componentes NUT em /var/log files.

Mine (Salicru UPS no Debian 7), por exemplo, registra isso:

Oct 28 13:37:49 hostname upsmon[1766]: UPS salicru@caramon on battery

quando o no-break muda para bateria, e isso

Oct 28 13:39:39 hostname upsmon[1766]: UPS salicru@caramon on line power

quando a energia está de volta.

Você pode simular uma falha de energia, ver as mensagens de log e, em seguida, gravar uma tarefa cron executada a cada minuto (ou 5 minutos), procurar essas linhas nos logs e realizar a ação desejada.

Espero que isso ajude.

    
por 29.10.2014 / 16:05

Tags