Como iniciar automaticamente o NUT Client na inicialização no MacOS

0

Estou tentando executar o NUT (Network UPS Tools) no meu Mac (MacOS 10.9.5) para que meu servidor Mac mini seja desligado corretamente em caso de falta de energia e a bateria do no-break se esgotar. Eu tenho seguido estas instruções:

link

Eu tenho o servidor NUT em execução no meu Synology NAS e o cliente NUT instalado no meu Mac mini (via Fink) e posso iniciá-lo manualmente fazendo:

sudo upsmon

Eu puxei a energia do no-break e vi eventos de energia gravados no terminal e no console. Eu não deixei drenar todo o caminho ainda, mas parece estar funcionando até agora.

Meu problema é que não consegui executá-lo automaticamente com o OS X. Tentei executar um script que foi incluído nas instruções:

#!/bin/sh

##
# UPS Monitor script
# Using Network UPS Tools executables
##

. /etc/rc.common

FINK_BIN="/sw/sbin"

StartService ()
{
    ConsoleMessage "Starting NUT (UPS Service)"
    if [ -n "'ps acxw | grep -i "upsmon" | awk {'print $1'}'" ]; then
        ConsoleMessage -f "NUT (UPS Service)"
        echo "Failed to start NUT (UPS Service): It is already running."
        exit 0
    fi
    ${FINK_BIN}/upsmon &
    if [ -n "'ps acxw | grep -i "upsmon" | awk {'print $1'}'" ]; then
        ConsoleMessage -s "NUT (UPS Service)"
        echo "NUT (UPS Service) successfully started."
        exit 0
    else
        ConsoleMessage -f "NUT (UPS Service)"
        echo "Failed to start NUT (UPS Service): Either the application has been deleted or it has no execution right."
        exit 0
    fi
}

StopService ()
{
    ConsoleMessage "Stopping NUT (UPS Service)"
    if [ -z "'ps acxw | grep -i "upsmon" | awk {'print $1'}'" ]; then
        ConsoleMessage -s "NUT (UPS Service)"
        echo "Failed to stop NUT (UPS Service): It is not running."
        exit 0
    fi
    ${FINK_BIN}/upsmon -c stop
    if [ -n "'ps acxw | grep -i "upsmon" | awk {'print $1'}'" ]; then
        ConsoleMessage -s "NUT (UPS Service)"
        echo "Failed to stop NUT (UPS Service) out of unknown reason."
        exit 0
    else
        ConsoleMessage -s "NUT (UPS Service)"
        echo "NUT (UPS Service) successfully stopped."
        exit 0
    fi
}

StopServiceForcefully()
{
    ConsoleMessage "Stopping NUT (UPS Service)"
    if [ -z "'ps acx | grep -i "upsmon" | awk {'print $1'}'" ]; then
        echo "Failed to stop NUT (UPS Service): It is not running."
    else
       kill -kill 'ps acxw | grep -i "upsmon" | awk {'print $1'}'
        if [ -n "'ps acxw | grep -i "upsmon" | awk {'print $1'}'" ]; then
            echo "Failed to stop NUT (UPS Service) out of unknown reason."
        else
             echo "NUT (UPS Service) successfully stopped."
        fi
    fi
}

RestartService()
{
    ConsoleMessage "Trying to restart NUT (UPS Service)."
    StopService
    StartService
    exit 0
}

RunService "$1"

No entanto, recebo este erro no Terminal:

line 75: $1: unbound variable

Este script pode ser corrigido? É possível apenas criar um novo script que irá apenas iniciar o upsmon e mantê-lo simples. Eu não consigo entender; Eu tentei algumas coisas para fazer isso, mas não consegui fazê-lo funcionar.

    
por interconnect 11.07.2017 / 23:58

1 resposta

1

Eu me deparei com essa pergunta enquanto tentava lembrar como eu fiz isso sozinho, mas acho que re-encontrei a solução. Eu segui as instruções em este post da lista de discussão ; tem alguns anos, mas ainda funciona para mim no macOS Sierra.

Se essa postagem ficar indisponível, veja uma cópia das principais informações contidas nela. Basicamente, uma vez que você tenha a configuração upsmon configurada da maneira desejada, basta criar um arquivo .plist (simplesmente um arquivo de texto com a extensão .plist), colocá-lo no diretório correto e, em seguida, reiniciar. Eu usei o texto textual do post para o arquivo .plist e ele continua strong para mim.

Especificamente, você pode criar um arquivo .plist com o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>org.networkupstools.upsmon</string>
   <key>OnDemand</key>
   <false/>
   <key>ProgramArguments</key>
   <array>
           <string>/opt/local/sbin/upsmon</string>
           <string>-D</string>
   </array>
</dict>
</plist>

Em seguida, salve-o com um nome como org.networkupstools.upsmon.plist em /Library/LaunchDaemons e ele deve iniciar o serviço automaticamente na inicialização a partir desse ponto.

    
por 30.10.2017 / 10:48