У меня есть домашний сервер (HP Proliant ML310 G4), который я купил у своего работодателя около месяца назад. Сервер работает под управлением Debian Linux, и я использую его практически для всего. Я могу справиться с этим, потому что мои потребности не так требовательны, поэтому сервер редко находится под большой нагрузкой в любой момент времени. Этот сервер имеет массив RAID 1 объемом 2 ТБ (с одним горячим резервом), управляемый mdadm, который я использую для обмена файлами по сети через Samba. Я запускаю ОС с меньшего жесткого диска, который не является частью массива.
Я питаю сервер от небольшого ИБП мощностью 255 Вт, потому что он мне нужен, чтобы выдерживать незначительные колебания мощности, не выходя из строя. Это очень важно, потому что внезапное нечистое завершение работы (вызванное падением напряжения или отключением питания) может испортить массив RAID, что уже произошло в одном случае.
Я полагаю, что в случае сбоя питания ИБП будет работать только 10-15 минут. Может быть больше, но я не хочу автоматически предполагать, что есть. Этого достаточно, чтобы пройти через отключения, которые длятся несколько минут или меньше. Однако, если питание отключается в течение нескольких часов, мне нужно, чтобы сервер автоматически отключился, прежде чем отключится питание ИБП. Надеемся, что в таких ситуациях целостность RAID не будет нарушена.
Такого рода вещи очень просты на ноутбуке, поскольку в нем есть встроенные датчики, позволяющие определить, когда он работает от батареи, а на этом сервере - нет (насколько я знаю). У меня необычная настройка сети, в которой мой модем DSL отделен от маршрутизатора. Маршрутизатор также находится на ИБП, что позволяет мне подключаться через SSH через мой ноутбук и выключать сервер в случае сбоя питания. К сожалению, это работает, только если я там в это время, чтобы сделать это. Мне нужно решение, которое всегда работает, независимо от того, вмешиваюсь я или нет.
Так как мой DSL модем не подключен к ИБП, он отключится, если отключится питание. Я настроил это намеренно, потому что у меня есть идея, как решить эту проблему: я думал о написании сценария, который будет пинговать google.com или какой-либо другой сайт с высоким трафиком / высокой доступностью. Если эхо-запрос завершится успешно, сервер продолжит работу. Если сбой проверки связи (из-за того, что модем выключен), сценарий подумает, что питание отключено, и скажет серверу завершить работу. Я бы добавил скрипт в Cron и запускал его каждые 5 минут. Мы надеемся, что это даст серверу достаточно времени для выключения, прежде чем ИБП перестанет работать.
Прежде чем приступить к написанию сценария, я хотел бы узнать, есть ли лучший способ сделать то, что мне нужно. Заранее благодарю за любую помощь.
источник
Ответы:
Существует старый, но проверенный способ: использовать старый аналоговый модем. Вот как
Теперь опрашивайте модем каждые несколько секунд, отправляя
ATZ[Enter]
и ожидайтеOK[Enter]
- если модем не отвечает, вы можете предположить, что он не имеет питания, то есть ИБП работает от батареи.редактировать
Суть в том, что если ваше интернет-соединение обрывается по какой-то другой причине, сервер не выключится, как должно быть.
Редактировать 2
Из комментариев:
источник
Обычно ups поставляется с разъемом USB или COM1. Когда вы подключите это к своему серверу, вы сможете начать мониторинг ИБП.
В среде Windows, без установки программного обеспечения, сообщения уже зарегистрированы, и он отключит сервер для вас. Я не знаю, как это работает на Linux, но я уверен, что есть несколько пакетов программного обеспечения для взаимодействия с вашим ИБП.
источник
Если вы используете Debian, попробуйте использовать NUT (инструменты сетевого ИБП). Я использую NUT, чтобы делать то, что вы описываете, на моем Synology NAS (на котором запущен busybox) и на домашнем веб-сервере под управлением Ubuntu 12.04 LTS. NAS подключен через USB к ИБП по той же причине, что и вы, потенциальная потеря всех моих файлов.
Я считаю, что ореховый демон каждую секунду запрашивает ИБП для определения статуса. Когда ИБП находится в режиме работы от батареи, его можно настроить на корректное отключение или сначала подождать X минут и т. Д. Вы также можете настроить несколько клиентов для подключения к демону орехов, который вы запускаете на своем сервере. Таким образом, ваш сервер также может корректно отключить несколько компьютеров в вашей сети. Для выполнения завершения работы вы можете предоставить свой собственный сценарий для служб отключения определенным образом или использовать встроенный сценарий, который просто вызывает shutdown -h, если я правильно помню.
Сайт NUT
Были лучшие сайты для поиска информации, но я не могу вспомнить их сейчас. Конфигурация может быть трудной, но если вы говорите о возможной потере RAID, проверьте это! В зависимости от ваших потребностей, вам может не понадобиться весь комплект NUT, вы можете обойтись только с частью UPSMON. Я думаю, вы можете получить это в пакете Ubuntu "Nut-Client".
Существует также NUT-клиент для Windows, но в Windows вам лучше использовать что-то вроде PowerChute или что-то подобное.
источник