apcupsd no Ubuntu Server: nobreak APC via USB, passo a passo
|

apcupsd no Ubuntu Server: nobreak APC via USB, passo a passo

O apcupsd é o daemon que faz um nobreak APC conversar com o Linux: ele lê o status da bateria pela porta USB e desliga o servidor sozinho antes da energia acabar de vez. Diferente do NUT (Network UPS Tools), que é genérico e cobre dezenas de marcas, o apcupsd é mantido pela própria linha de produtos APC e usa o protocolo nativo do fabricante — por isso detecta mais métricas (tensão de entrada, temperatura interna, número de trocas de bateria) do que um driver genérico consegue.

Por que não usar só o desligamento automático do nobreak

Um nobreak sozinho protege contra queda de tensão, mas não sabe o que está rodando dentro do servidor. Se a bateria acabar com o sistema de arquivos aberto, o resultado é journal corrompido, banco de dados inconsistente ou, no pior caso, um RAID que sobe em modo degradado no próximo boot. O apcupsd resolve isso: ele monitora a carga da bateria em tempo real e dispara um desligamento limpo — sync, encerramento de serviços, halt — com folga suficiente antes do apagão total.

Antes de instalar

Confirme três coisas antes de sair digitando:

  • Cabo USB, não serial. Nobreaks APC atuais (Back-UPS, Smart-UPS com porta USB) usam um cabo USB-A comum. Modelos antigos com porta serial DB9 exigem UPSCABLE 940-0095A e outro UPSTYPE — este guia cobre o caso USB, que é o padrão hoje.
  • NUT desligado. Os dois daemons disputam a mesma porta USB. Se o pacote nut-client ou nut-server estiver instalado, remova ou pare o serviço antes de seguir — do contrário o apcupsd sobe e não encontra o dispositivo.
  • Permissão do usuário que roda o serviço. O apcupsd roda como root por padrão em pacote Ubuntu, então não é preciso mexer em regra de udev — mas se você isolar o serviço depois, o dispositivo aparece como /dev/usb/hiddevX ou via hidraw.

Instalação e configuração do apcupsd.conf

  1. Instale o pacote (está no repositório universe do Ubuntu):

    sudo apt update
    sudo apt install apcupsd
  2. Nesta primeira instalação, o daemon já sobe automaticamente mas fica em modo inerte até você confirmar a configuração. Abra o arquivo principal:

    sudo nano /etc/apcupsd/apcupsd.conf
  3. Ajuste as quatro linhas que definem a conexão. Para um nobreak APC ligado por USB, o padrão é deixar DEVICE em branco — o apcupsd detecta a porta sozinho pelo barramento HID:

    UPSNAME servidor01
    UPSCABLE usb
    UPSTYPE usb
    DEVICE
  4. Confirme os limiares de desligamento — são eles que decidem quando o servidor desliga sozinho. Os três funcionam em ou: o primeiro que for atingido dispara o shutdown:

    BATTERYLEVEL 25
    MINUTES 5
    TIMEOUT 0
    ONBATTERYDELAY 6

    Por que 25% e não o padrão de fábrica (5%)? Porque 5% é a margem de segurança do fabricante para o nobreak, não para o seu servidor. Um Ubuntu Server com poucos serviços leva de 30 a 90 segundos para desligar de forma limpa; deixar a decisão para os últimos 5% de carga é apostar que nada vai atrasar esse processo. TIMEOUT 0 mantém esse gatilho desligado — ele força o shutdown por tempo corrido e é útil só em nobreaks sem leitura de bateria confiável.

  5. Libere o serviço para rodar de fato — no Ubuntu, o pacote vem com um interruptor de segurança separado:

    sudo nano /etc/default/apcupsd

    Troque a linha para:

    ISCONFIGURED=yes
  6. Reinicie o serviço e confira se ele está de pé:

    sudo systemctl restart apcupsd
    sudo systemctl status apcupsd

Testando a comunicação com apctest e apcaccess

Antes de confiar no desligamento automático, confirme que o daemon está lendo o nobreak de verdade — não só que o serviço está “ativo”.

  1. apcaccess mostra o status atual sem parar nada, é o comando do dia a dia:

    apcaccess status

    Confira principalmente três campos: STATUS (deve estar ONLINE), BCHARGE (carga da bateria em %) e TIMELEFT (autonomia estimada em minutos). Se o comando retornar COMMLOST, o cabo USB ou o UPSTYPE está errado.

  2. Para um teste interativo mais profundo — inclusive simular queda de energia —, pare o daemon e use o apctest:

    sudo systemctl stop apcupsd
    sudo apctest

    O menu interativo tem a opção 6) Simulate power failure, que reporta o evento como se a energia tivesse caído, sem desconectar o nobreak de verdade. Use Ctrl+C para sair e depois suba o serviço de novo:

    sudo systemctl start apcupsd

Simulando uma queda de energia real

O teste do apctest confirma a leitura, mas não confirma que o script de desligamento funciona de ponta a ponta. Para isso, desconecte o nobreak da tomada com o servidor rodando um workload não crítico — nunca faça esse teste em produção sem uma janela de manutenção.

Acompanhe o log em outra sessão SSH enquanto a bateria descarrega:

tail -f /var/log/apcupsd.events

Você deve ver, em sequência: Power failure, o alerta de Running on UPS batteries e, ao cruzar o limiar configurado em BATTERYLEVEL ou MINUTES, a linha Initiating system shutdown!. Se o servidor desligar antes de escrever essa última linha, os limiares estão apertados demais — suba o BATTERYLEVEL ou o MINUTES e repita o teste.

Perguntas frequentes

apcupsd funciona com nobreak de outra marca?
Não oficialmente. Ele foi escrito para o protocolo da APC; para outras marcas (Eaton, CyberPower, SMS, TS Shara), use o NUT, que tem drivers genéricos e específicos por fabricante.

Preciso reiniciar o apcupsd toda vez que mudo o apcupsd.conf?
Sim — o daemon lê o arquivo só na inicialização. Rode sudo systemctl restart apcupsd depois de qualquer alteração e confirme com apcaccess status.

Dá para avisar por e-mail quando a energia cai?
Sim, editando o script /etc/apcupsd/apccontrol ou os hooks em /etc/apcupsd/ (como onbattery e offbattery) para disparar um mail ou webhook. O apcupsd só chama o script; o envio é responsabilidade dele.

O apcupsd desliga só o servidor ou o nobreak também?
Os dois, se você não editar nada. Depois do shutdown do sistema, o daemon manda o comando de corte de energia para o nobreak (parâmetro KILLDELAY) — útil para não deixar o equipamento drenando a bateria até zero enquanto ninguém está olhando.

Funciona dentro de uma VM?
Só se a USB do nobreak for repassada (passthrough) para a VM. Em um host com várias VMs, o padrão é rodar o apcupsd no hypervisor e replicar o alerta para os convidados via NIS (porta 3551) ou script próprio — não instale um apcupsd por VM tentando ler a mesma USB.

Conclusão

Para um parque com nobreak APC, o apcupsd entrega mais telemetria e um desligamento mais confiável do que depender só da autonomia da bateria. O ganho real não é a instalação — é ajustar BATTERYLEVEL, MINUTES e ONBATTERYDELAY para a realidade do seu servidor e depois testar de verdade com o nobreak desconectado, não só confiar no valor padrão do pacote.

Gostou? Compartilhe.

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *