On 26/09/2023 14:19, Andrey Jr. Melnikov wrote:
Max Nikulin wrote:

https://manpages.debian.org/bookworm/sysvinit-core/init.8.en.html#CHANGING_RUNLEVELS
я перестал понимать, куда его дальше-то расширять? Вроде наоборот хотят
сузить, выкинув /etc/powerstatus, по которому определяется, какой из 3
скриптов запускать по SIGPWR
Даа, читал ты его явно по диагонали.

Тем не менее единственное новое, что я увидел в пересказе, - это /var/run/powerstatus, что не особенно принципиально (из разряда мелочь, но приятно).

L(OW)
     The power is failing and the UPS has a low battery. Execute the
     powerfailnow entries.
Я не в восторге от такого решения, но и предлагавшиеся 3 сигнала, с моей
точки зрения, не лучше.
Т.е. с твоей точки зраения один signal(1, SIGRTMIN+x) хуже чем вся эта
пляска вокруг файликов с сигналами и FIFO?

Я думаю, мы ни до чего не договоримся, да и не важно, ведь ни на что это не повлияет.

Да, у меня прямо противоположное мнение о том, какой интерфейс лучше подходит. Перенумеровать все возможные события - затея гиблая, люди в них начнут путаться. Надо ведь еще и имена им дать. Поэтому я против 3-х сигналов.

Я думаю, что когда люди выбрали один SIGPWR + /etc/powerstatus, они рассматривали 3 сигнала и остановились на варианте, который сейчас выглядит несколько вычурным.

Послать-то сигнал может и просто, а вот правильно поймать уже некоторое искусство. Чинить обработчики сигналов - трудоемкий процесс. За это я сигналы не люблю.

С сокетами проще. Если есть утилита и библиотека, которые могут слать нужные сообщения, и процесс их может правильно обработать, то это лучше, чем сигналы. Мне такой вариант нравится больше.

А вообще, можно и полностью избавить init от кода, специфичного для обработки событий питания. Все равно это сводится к более общему и универсальному интерфейсу "запустить команду с параметрами". Вот пусть демон UPS и просит выполнить один из вариантов "powerfail start", "powerfail now", "powerfail stop" (ну или что-то похожее) прямым текстом без эфвемизмов вроде нумерованных сигналов.

On 19/09/2023 14:00, Andrey Jr. Melnikov wrote:
Я бы понял, если бы он сделал 3 сигнала SIGPWR для информирования о том,
что питание пропало, SIGRTMIN+x1 для информирования о том, что питание
появилось обратно и SIGRTMIN+x2 - для emergency power shutdown - был бы
разговор о прогрессе и удобстве.

Это про systemd было.
Увы, в systemd тоже этого не сделали.

Я бы еще понял ругань, что в systemd отломали старые интерфейсы. С ininctl вообще какой-то абсурд. Он сообщения понимает, но просто плюется в логи, что обновляйте свой UPS.

Cигналов в systemd как раз выше крыши:

On 19/09/2023 14:00, Andrey Jr. Melnikov wrote:
Да, задизайнить
SIGRTMIN+4 в poweroff и SIGRTMIN+14 в immediate poweroff - смог

Ну вот 2 сигнала уже есть. Точнее там другая интерпретация SIGPWR: готовьтесь, питание может кончится, а запускаемые скрипты уже могут что-то делать, хоть тот же powerstatus читать.

Если питание вернулось, то для этого есть

SIGRTMIN+0
  Enters default mode, starts the default.target unit.
  This is mostly equivalent to systemctl isolate default.target.

Ну просто мечта любителя сигналов.

Ответить