Здравствуйте!Стоит следующая задача: требуется корректно остановить сервер на FreeBSD и выдать команду на UPS для отключение питания.
UPS "тупой": умеет отключаться только мгновенно (без программируемой задержки) по получению надлежащего сигнала. Для этого надо из скрипта выполнить все подготовительные действия по остановке FreeBSD и _после_ этого вызвать определенную команду.Участники проектов apcupsd и NUT считают, что данным типом UPS задача решения не имеет, т.к. скрипт rc.shutdown полностью отрабатывает до того, как будут завершены все процессы и файловая система будет стабильна. Окончательные действия выполняются из ядра, и вызвать команду управления UPSом к этому моменту уже невозможно. Тем не менее, один испанец предлагает вручную прописать в rc.shutdown размонтирование и перемонтирование в r/o файловых систем и после этого вызов "рубильника". Сразу скажу, это не срабатывает. /var и /usr не размонтируются, т.к. заняты процессами. Вызов umount -af приводит к немедленному обрушению почти всех оставшихся процессов. Это понятно. Но, хотя отключение питания вещь сама по себе аварийная, не хочется так насиловать систему (хотя крах процессов все же лучше краха файловой системы...). Так можно ли все-таки написать корректный скрипт, аналогичный действиям ядра перед остановкой системы? Что именно ядро делает и в какой последовательности? На ковыряние исходников моего экспириенса, к сожалению, не хватает...
Отбомжуй в проходе метро денег и купи нормальный УПС.
Уважаемый сэр, меня не интересует Ваше мнение, где мне взять денег на новый UPS. Если не понятно с первого раза, вопрос находится в заголовке.
>Стоит следующая задача: требуется корректно остановить сервер на FreeBSD и выдать команду
>на UPS для отключение питания.
>UPS "тупой": умеет отключаться только мгновенно (без программируемой задержки) по получению надлежащего
>сигнала.если он настолько тупой, то попробуйте решить проблему "железно" -- т.е. посылать нужный сигнал после пропадания 5V от БП "сервера".
>если он настолько тупой, то попробуйте решить проблему "железно" -- т.е. посылать
>нужный сигнал после пропадания 5V от БП "сервера".Обычный старенький "dumb signaling". Ваше решение мне нравится оригинальностью! Про использование ACPI при шатдауне я, честно говоря, не подумал. Но тут дело такое. Доделать сам интерфейс UPS'а аппаратно, до поддержки задержки отключения, мне тоже не трудно. Тогда все делается вообще штатно. Интерес больше академический, именно к ковырянию Фри. Здесь я знаю гораздо меньше, а интересно разобраться. Поиск по Интернету практически ничего не дал.
Да, если это правда вызывает вопросы. Сервер домашний и все это делается ради чистого энтузиазизму.
Думаю придется править и пересобирать ядро.
В /usr/src/sys/kern/kern_shutdown.c есть функция shutdown_halt, которая выдает соотв. сообщение на консоль и вызывает cpu_halt().
До этого момента уже все необходимые процедуры выполнены, все процессы потушены, фс синхронизированы и отмонтированы.
Перед вызовом cpu_halt() необходимо сменить RTS на ком-порту (или другой сигнал, смотря какой кабель к упсу).i386_set_ioperm(0x03fc,1,1);
outb(0x03fc,2);
i386_set_ioperm(0x03fc,1,0);Где 0x03fc - регистр выходов ком-порта при базовом адресе 0x03f8 (+4)
2 - второй бит отвечает за RTS, возможно надо записать 0.
>Думаю придется править и пересобирать ядро.
>В /usr/src/sys/kern/kern_shutdown.c есть функция shutdown_halt,Вот спасибо за наводку на нужное место!
>i386_set_ioperm(0x03fc,1,1);
>outb(0x03fc,2);
>i386_set_ioperm(0x03fc,1,0);А можно ли из ядра работать с устройствами через open(), ioctl()?
есть результат ?
>один испанец предлагает вручную прописать в rc.shutdown
>размонтирование и перемонтирование в r/o файловых систем и после этого вызов
>"рубильника". Сразу скажу, это не срабатывает. /var и /usr не размонтируются,
>т.к. заняты процессами.Значит, процессы нужно остановить.
Моё предложение такое:
Вот идёт нормальная последовательность остановки:
stop одно
stop другое
....
stop последнее
umount всё
<----------- вот сюда вставить mount -o ro ...
<----------- послать команду UPS-у выключиться
haltА что за UPS такой тупой?
>Значит, процессы нужно остановить.
>Моё предложение такое:
>Вот идёт нормальная последовательность остановки:
> stop одно
> stop другое
> ....
> stop последнееЧто касается процессов имеющих управляющие скрипты в rc.d, это делается в rc.shutdown и так. Но в системе может быть произвольное количество процессов, которые никак не управляются этим механизмом и, вообще, может быть загружено что угодно. Как их вылавливать, я себе не очень представляю. kill -15 -1 дает феерический эффект: убивается в том числе и шел, который выполняет rc.shutdown. Естественно, это никуда не годится. В этом то и проблема. К тому же я не уверен, что ядро только процессы подчищает и файловую систему останавливает. Возможно оно еще какие-то действия совершает перед остановкой.
> А что за UPS такой тупой?
Конкретно этот Powercom ONH-600. Выпускался лет 10 назад. Интересен оригинальной, ныне похоже не используемой, схемотехникой, представляющей гибрид on-line и standby. Не вижу пока смысла менять его только ради обладания smart signaling. За эти деньги гораздо интереснее собрать систему удаленного мониторинга/управления по GSM.
>[оверквотинг удален]
>проблема. К тому же я не уверен, что ядро только процессы
>подчищает и файловую систему останавливает. Возможно оно еще какие-то действия совершает
>перед остановкой.
>
>> А что за UPS такой тупой?
>
>Конкретно этот Powercom ONH-600. Выпускался лет 10 назад. Интересен оригинальной, ныне похоже
>не используемой, схемотехникой, представляющей гибрид on-line и standby. Не вижу пока
>смысла менять его только ради обладания smart signaling. За эти деньги
>гораздо интереснее собрать систему удаленного мониторинга/управления по GSM.Да бросьте вы... тот же киловатный упс от инелта c поддержкой нужного вам "парашюта" стоит не так дорого... http://www.ineltups.ru/index.php?direct=catalog&topic=105161...
Каким образом его цеплять к вашей фрюхе спросите в местной тех. поддержки. Они точно знают. Просто там в дурацком описании к дровам написано, что поддерживаются уже несуществующие версии фри... а реально надо по другому настраивать о чем местная тех. поддержка вам с радостью сообщит.
>Да бросьте вы... тот же киловатный упс от инелта c поддержкой нужного
>вам "парашюта" стоит не так дорого...Ну ёлки-палки. Я ж писал уже, нет проблемы пойти и купить что угодно. Вопрос в том, что мне стало интересно, можно ли аккуратно погасить Фрю до передачи управления ядру.
PS: Предложенный UPS - бяка, по сравнению с имеющимся. Он даже гладкую синусоиду не выдаёт. Если уж менять, то на более приличный line-interactive или on-line.
>PS: Предложенный UPS - бяка
>Он даже гладкую синусоиду не выдаёт. Если уж менять, то на более приличныйИ обязательно с безкислородными проводами для ярких низов! %))
>>Он даже гладкую синусоиду не выдаёт. Если уж менять, то на более приличный
>
>И обязательно с безкислородными проводами для ярких низов! %))И с электролитом из соплей девственницы. ^_^