У меня есть домашний сервер (HP Proliant ML310 G4), который я купил у своего работодателя около месяца назад. Сервер работает под управлением Debian Linux, и я использую его практически для всего. Я могу справиться с этим, потому что мои потребности не так требовательны, поэтому сервер редко находится под большой нагрузкой в любой момент времени. Этот сервер имеет массив RAID 1 объемом 2 ТБ (с одним горячим резервом), управляемый mdadm, который я использую для обмена файлами по сети через Samba. Я запускаю ОС с меньшего жесткого диска, который не является частью массива.
Я питаю сервер от небольшого ИБП мощностью 255 Вт, потому что он мне нужен, чтобы выдерживать незначительные колебания мощности, не выходя из строя. Это очень важно, потому что внезапное нечистое завершение работы (вызванное падением напряжения или отключением питания) может испортить массив RAID, что уже произошло в одном случае.
Я полагаю, что в случае сбоя питания ИБП будет работать только 10-15 минут. Может быть больше, но я не хочу автоматически предполагать, что есть. Этого достаточно, чтобы пройти через отключения, которые длятся несколько минут или меньше. Однако, если питание отключается в течение нескольких часов, мне нужно, чтобы сервер автоматически отключился, прежде чем отключится питание ИБП. Надеемся, что в таких ситуациях целостность RAID не будет нарушена.
Такого рода вещи очень просты на ноутбуке, поскольку в нем есть встроенные датчики, позволяющие определить, когда он работает от батареи, а на этом сервере - нет (насколько я знаю). У меня необычная настройка сети, в которой мой модем DSL отделен от маршрутизатора. Маршрутизатор также находится на ИБП, что позволяет мне подключаться через SSH через мой ноутбук и выключать сервер в случае сбоя питания. К сожалению, это работает, только если я там в это время, чтобы сделать это. Мне нужно решение, которое всегда работает, независимо от того, вмешиваюсь я или нет.
Так как мой DSL модем не подключен к ИБП, он отключится, если отключится питание. Я настроил это намеренно, потому что у меня есть идея, как решить эту проблему: я думал о написании сценария, который будет пинговать google.com или какой-либо другой сайт с высоким трафиком / высокой доступностью. Если эхо-запрос завершится успешно, сервер продолжит работу. Если сбой проверки связи (из-за того, что модем выключен), сценарий подумает, что питание отключено, и скажет серверу завершить работу. Я бы добавил скрипт в Cron и запускал его каждые 5 минут. Мы надеемся, что это даст серверу достаточно времени для выключения, прежде чем ИБП перестанет работать.
Прежде чем приступить к написанию сценария, я хотел бы узнать, есть ли лучший способ сделать то, что мне нужно. Заранее благодарю за любую помощь.