umount для /proc/bus/usb выполняется до передачи бесперебойнику команды на отключение. Если UPS USB-шный, команду, я так понимаю, он не получит: [ -f /proc/bus/usb/devices ] && umount -n /proc/bus/usb >/dev/null 2>&1 <skip> # See if this is a powerfail situation. UPSCTL=/etc/apcupsd/apccontrol if [ -x "$UPSCTL" -a -f /etc/apcupsd/powerfail ]; then action "Attempting to turn the UPS off:" "$UPSCTL" killpower message="The system is halted" command=/sbin/poweroff fi UPSCTL=/sbin/upsdrvctl if [ -x "$UPSCTL" -a -f /etc/killpower ]; then action "Attempting to turn the UPS off:" "$UPSCTL" shutdown message="The system is halted" command=/sbin/poweroff fi
И что вы предлагаете?
Пока не знаю. А каков, вообще, смысл в отмонтировании usb ?
И один не сильно хороший вариант, пока не прояснен вопрос с необходимостью отмонтирования USB. Вести список UPS, которые выдерживают паузу после получения команды. В случае обнаружения UPS из списка отложить отмонтирование. На сколько я помню APC-шные Смарты к таковым относятся. Попробую проверить завтра. Кстати, кажется еще одна бага: command=/sbin/poweroff. Это приведет к тому, что будет отключено питание у ATX материнки. Если у нее в BIOS стоит "запоминать последнее состояние", то после подачи питания с UPS системник не включится. Я думаю, что если идет отключение по power fail, то должно быть halt, а не poweroff.
Копирую из devel: ----- я провел эксперименты с APC Smart UPS 700. Оказалось, что все еще хуже. В кратце, команда killpower должна даваться бесперебойнику в K00, а не в S01. Поясняю. Критерием для начала процесса shutdown у apcupsd служит параметр в EEPROM UPS, который в отчете apcupsd называется MINTIMEL. Этот же параметр является задержкой для отключения питания у самого UPS после получения команы killpower. В результате, в текущей ситуации с halt 1. пока UPS отключит питание, успевает отработаться все. 2. если poweroff не сможет отключить питание, есть риск, что UPS отключится не по команде killpower, а просто потому, что батареи сели. ----- Еще бы на чем проверить...
Created attachment 874 [details] инитскрипт инит-скрипт, проверяющий наличие UPS с отсрочкой отключения и передающий ему команду killpower. Теоретически рассчитан на apcupcd и nut,
Created attachment 875 [details] скрипт для проверки UPS а это скрипт со списком UPS, на которые должен реагировать инит-скрипт. Это уже только для apcupsd. Для NUT надо написать соответствующий upscheck.
Кстати, у меня есть жалоба человека, который уже "попал" с сервером на выходных. Его USB-шный Smart не поймал killpower, а питание восстановилось до того как батареи сели окончательно. В результате бесперебойник не выполнил цикл по питанию и сервер остался зашотдауненным.
Начиная с 0.9.8.9-alt1, /proc больше не отмонтируется.
Тоже вариант. Хотя, боюсь, как бы udev теперь на это не влиял... Постараюсь проверить.