Выключение серверов APC PowerShute
На днях решал задачу корректного выключения всех серверов в компании при отключении питания. Простейшая задача оказалась не так проста для решения
. Мы используем ИБП APC SURT3000XLI — аппарат хороших, к нему подключено несколько серверов, но проблема в том что USB-кабель один, и соответственно можно поставить Agent только на один сервер, он то и будет выключен автоматически, остальным просто отрубят питание.
APC PowerShute Business Edition позволяет перед выключением сервера выполнить командный файл. Самое простое решение напрашивалось само собой
shutdown -s -m -f \\server1 shutdown -s -m -f \\server2 shutdown -s -m -f \\server3
Не тут то было. Оказывается PowerShute очень интересно обрабатывает командные файлы, и сам по себе файл надо приводить к виду «понятному» агенту @START «» «shutdown -s -m -f \\server1″ к сожалению это тоже не помогло. Почитав дальше форумы и сайт apc.com выяснил что службу APCBEAgent надо запускать от имени пользователя, который имеет права выключать сервера, логично, но изменение и имени входа не дола желаемого результата. У меня сложилось впечатление, что APC специально блокирует запуск программы shutdown и с ней похожих, провоцируя нас переходить на другие продукты.
Но как говорится русские на сдаются. Прибегнув к помощи коллег, была быстро написана программа на C#, которая просто выполняет список команд в файле
. В итоге имеем AppLauncher.exe файл command.txt и уже в нем знакомые всем строки:
shutdown -s -m -f \\server1 shutdown -s -m -f \\server2 shutdown -s -m -f \\server3
Указываем в качестве исполняемого файла AppLauncher.exe и все, сервера выключаются великолепно.
Скачать утилиту можете здесь AppLauncher.zip.