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-0095Ae outroUPSTYPE— 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-clientounut-serverestiver 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/hiddevXou viahidraw.
Instalação e configuração do apcupsd.conf
-
Instale o pacote (está no repositório universe do Ubuntu):
sudo apt update sudo apt install apcupsd
-
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
-
Ajuste as quatro linhas que definem a conexão. Para um nobreak APC ligado por USB, o padrão é deixar
DEVICEem branco — o apcupsd detecta a porta sozinho pelo barramento HID:UPSNAME servidor01 UPSCABLE usb UPSTYPE usb DEVICE
-
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 0mantém esse gatilho desligado — ele força o shutdown por tempo corrido e é útil só em nobreaks sem leitura de bateria confiável. -
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
-
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”.
-
apcaccessmostra o status atual sem parar nada, é o comando do dia a dia:apcaccess status
Confira principalmente três campos:
STATUS(deve estarONLINE),BCHARGE(carga da bateria em %) eTIMELEFT(autonomia estimada em minutos). Se o comando retornarCOMMLOST, o cabo USB ou oUPSTYPEestá errado. -
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+Cpara 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.