UPower em servidores

O UPower pode ser útil em servidores que tenham UPS com comunicação USB (e serial talvez). Os modelos da APC costumam funcionar sem briga. Assim, você consegue desligar a máquina antes das baterias esgotarem-se.

No Fedora 21, instale o pacote upower. O serviço é ativado por D-Bus e é iniciado sempre que algum outro programa requisitar suas interfaces. O pacote do Fedora não espera, contudo, e inicia-o incondicionalmente via graphical.target. Isso funciona quando existe a pilha gráfica. Não quando você está numa instalação mínima em modo texto, cujo target padrão é multi-user.target. Podemos adotar três caminhos:

- Executar durante o boot algum programa que ative o daemon (upowerd), como uma invocação do binário upower. Gambiarra que descarto.

- Alterar o target com systemctl set-default graphical.target. Essa é uma solução decente, mas não me agrada muito pois, se formos analisar minuciosamente, o único serviço pertencente ao graphical.target será upower.service.

- Alterar o .service para fazer parte de multi-user.target.

Levando em conta que existe forma limpa do administrador substituir o conteúdo dos .service da distribuição, o último é o meu preferido:

# systemctl stop upower.service
# systemctl disable upower.service
# cp /usr/lib/systemd/system/upower.service /etc/systemd/system
# sed -i 's/graphical/multi-user/g' /etc/systemd/system/upower.service
# systemctl daemon-reload
# systemctl enable upower.service
# systemctl start upower.service

Em /etc/UPower/UPower.conf você configura, dentre outras opções, o que deve ser feito quando a carga atingir nível crítico. O daemon então falará com o logind via D-Bus para fazer o que estiver configurado.

CriticalPowerAction=PowerOff

Um bug, entretanto, consertado na versão 0.99.2, fazia a opção não ser interpretada. Ao menos o upowerd vai tentando, na seguinte ordem, até o logind responder que um dos métodos é suportado: HybridSleep, Hibernate, PowerOff.

Os sistemas de arquivos agradecem. ;-)

Acho que aplica-se também ao CentOS 7. Nele, é usada uma versão antiga do pacote, porém o resto é igual.

Comentários