Как корректно завершить работу СХД Promise VTRAK M500i при отключении электричества?
На работе была поставлена следующая задача: при отключении электричества все серверы должны корректно завершить свою работу и отключиться. И я уже писал подобную заметку, где рассматривал выключение сервера ESXi. Ознакомиться можно тут:
Недавно потребовалось сделать такую же работу в другой серверной. А там к одному из серверов подключена СХД Promise VTRAK M500i. Это довольно старая модель СХД, которая сама не умеет мониторить ИБП. Значит выключать её придётся по такому же принципу, как и сервер ESXi в прошлой заметке. Разница лишь в том, что подключаться к СХД придётся по Telnet. Поэтому, первым шагом, надо включить доступ по Telnet на самой СХД. Захожу в Administrative Tools → Software Management → Telnet:
И там запускаю сервис Telnet:
После этого пробую подключиться со своего компа:
telnet 10.100.100.7 2300
где 2300 — это порт. Система попросит ввести логин и пароль от Promise. Так это всё выглядит в консоли:
[adm@fed ~]$ telnet 10.100.100.7 2300
Trying 10.100.100.7...
Connected to 10.100.100.7.
Escape character is '^]'.
-------------------------------------------------------------
Promise VTrak Command Line Interface (CLI) Utility
Version: 2.02.0000.00 Build Date: Jun 21, 2006
Copyright 2006, Promise Technology, Inc. All rights reserved.
-------------------------------------------------------------
Login: administrator
Password: *************
-------------------------------------------------------------
Type help or ? to display all the available commands
Type menu to enter Menu Driven Configuration Utility
-------------------------------------------------------------
administrator@cli>
Теперь, чтобы завершить работу СХД, надо выполнить команду:
shutdown -a shutdown
Система начнёт завершать работу. В документации написано, что ей на это понадобится не менее 2-ух минут. Это надо иметь ввиду. У меня выключение заняло примерно 5 минут.
Теперь встаёт вопрос, как организовать выключение автоматически при низком заряде ИБП. Как и в прошлый раз, для этого понадобится какой-нибудь линуксовый сервер, который будет выключаться параллельно с СХД. Но консольная программка Plink не поможет в этот раз. Ибо есть вот такая проблема:
plink -telnet 10.100.100.7 -P 2300 -l administrator -pw 'mypassword'
plink: the -pw option can only be used with the SSH protocol
Нельзя подключаться к телнету, используя пароль в качестве опции подключения.
На помощь приходит Bash-скрипт, который я взял с этого ресурса:
https://admin-gu.ru/coding/bash/bash-skript-dlya-avtomaticheskogo-telnet-soedineniya-i-vvoda-komand
И немного причесал под себя:
#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin
#Входные данные:
USER="administrator"
PASSWD="mypassword"
LOG="telnet_shutdown.log"
HOSTS="
10.100.100.7
"
for H in $HOSTS
do
echo START SCRIPT: >> $LOG
date +%x-%R >> $LOG
(
sleep 1;
echo -en "$USER\r";
sleep 1;
echo -en "$PASSWD\r";
sleep 1;
echo -en "shutdown -a shutdown\r";
sleep 1;
) | telnet $H 2300 >> $LOG
echo =================================== >> $LOG
done
exit
Обзову этот скрипт, например, telnet_shutdown.sh и положу его в каталог /etc/apcupsd на линуксовом сервере, на котором установлена и настроена программа Apcupsd. Не забываю сделать этот файл исполняемым:
chmod +x telnet_shutdown.sh
Также не забываю установить Telnet, если его нет:
apt-get install telnet
Теперь надо отредактировать файл /etc/apcupsd/apccontrol. В нём надо найти секцию doshutdown и добавить одну строчку. Это должно выглядеть так (выделил зелёным добавленное):
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
# сначала завершить работу СХД Promise
/etc/apcupsd/telnet_shutdown.sh
/bin/sleep 5
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
;;
Всё. Теперь линуксовый сервер, увидев, что заряд батареи в ИБП низкий, сначала подключится по Telnet к СХД Promise VTRAK M500i и отправит ему команду завершения работы, затем уже сам завершит работу.
Донаты принимаются на кошельки:
Yoomoney:
4100118091867315
BTC:
bc1qzw9vam8mv6derwscxl0vrnd6m9t2rpjg273mna
ETH / BNB BSC / Polygon MATIC:
0x5cc07FF76490350ac6112fbFdA1B545Bc794602F
Tron:
TJUz8sJr9XYMjVqzmFNnCzzRWfPa57X2RV
USDT/USDC в сетях ETH/BSC/Polygon:
0x5cc07FF76490350ac6112fbFdA1B545Bc794602F
USDT в сети TRX (Tron):
TJUz8sJr9XYMjVqzmFNnCzzRWfPa57X2RV
LTC:
LRMZaFCSyCT6FUF62WEX1BokWV7v2dh2zo
Doge:
DTEnGLZRps9XaWNtAhchJWSeD4uTNDRxg7
XMR:
4A6uP1WxEc7HktToZFyiJuK6YmjdL8bSn2aY653qPwABhT4Y56iFuedgHcmpvLwWE55u8qkjGc715ZJs761FqedA8gkgznr
TON:
UQAdSPiWIDx2Q1VIeezkUV3s4sNlZM90w2ohSO6bD2-okwgY