On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote: > Я только что нарвался на неприятный баг: на попытке перезапустить (не > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
Ядро линукса не блокирует передачу таких сигналов процессу с pid=1. > подбирает zombie, систему можно перезапустить только вручную (убив > процессы и перемонтировав fs в read-only; ну, или через > alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д. Как видно из /etc/inittab, для halt/reboot выполняются скрипт /etc/init.d/rc с аргументом 0 или 6. Это и есть штатный способ остановки системы. После отработки "rc 0/6" init должен сделать вызов reboot(2) с нужными аргументами. Собственно, если компьютер под рукой, то можно просто нажать кнопку. Если же он далеко, и никаких инженеров дежурной смены рядом нет (а у меня так почти везде), то можно извернуться и вызвать сискол perl'ом -- нужен лишь смонтированный на чтение /usr. Мне доводилось так ребутать машины, этот способ вполне рабочий. -- Eugene Berdnikov