Я пытаюсь запустить NUT (Network UPS Tools) на моем Mac (MacOS 10.9.5), чтобы мой сервер Mac mini полностью отключился в случае сбоя питания и разрядился аккумулятор ИБП. Я следовал этим инструкциям:

https://community.netgear.com/t5/New-to-ReadyNAS/NUT-on-OSX-10-6-Sharing-a-UPS-with-ReadyNAS-and-Computers/td-p/661293

На моем Synology NAS работает сервер NUT, а на моем Mac mini (через Fink) установлен клиент NUT, и я могу запустить его вручную, выполнив:

sudo upsmon

Я отключил питание ИБП и увидел события, связанные с питанием, записанные в терминал и консоль. Я еще не дал ему опустошиться, но, похоже, он работает до сих пор.

Моя проблема в том, что я не смог запустить его автоматически с OS X. Я попытался запустить скрипт, который был включен в инструкции:

#!/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"

Тем не менее, я получаю эту ошибку в терминале:

line 75: $1: unbound variable

Можно ли исправить этот скрипт? Можно ли просто создать новый скрипт, который просто запустит upsmon и сделает его простым. Я не могу понять это; Я попробовал несколько вещей, чтобы сделать это, но не смог заставить его работать.

1 ответ1

1

Я столкнулся с этим вопросом, пытаясь вспомнить, как я это сделал сам, но я думаю, что нашел новое решение. Я следовал инструкциям в этом списке рассылки ; ему несколько лет, но он все еще работает для меня в macOS Sierra.

Если это сообщение становится недоступным, вот копия ключевой информации в нем. По сути, после того, как вы настроили свою конфигурацию upsmon так, как вы этого хотите, вам просто нужно создать файл .plist (просто текстовый файл с расширением .plist) и поместить его в нужный каталог, а затем перезапустить. Я использовал дословный текст из поста для файла .plist, и он все еще силен для меня.

В частности, вы можете создать файл .plist со следующим содержимым:

<?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>

Затем сохраните его с именем, например org.networkupstools.upsmon.plist в /Library/LaunchDaemons и с этого момента служба должна автоматически запускаться при загрузке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .