Re: systemd в jessie умирает с SIGFPE
Hello Eugene, On Sat, 12 Sep 2015 18:09:07 +0300 Eugene Berdnikovwrote: > Как видно из /etc/inittab, для halt/reboot выполняются скрипт > /etc/init.d/rc с аргументом 0 или 6. Это и есть штатный способ > остановки системы. После отработки "rc 0/6" init должен сделать вызов > reboot(2) с нужными аргументами. Собственно, если компьютер под > рукой, то можно просто нажать кнопку. Если же он далеко, и никаких > инженеров дежурной смены рядом нет (а у меня так почти везде), то > можно извернуться и вызвать сискол perl'ом -- нужен лишь > смонтированный на чтение /usr. Мне доводилось так ребутать машины, > этот способ вполне рабочий. echo b > /proc/sysrq-trigger -- Best regards, Alexander Gerasiov Contacts: e-mail: g...@cs.msu.su Homepage: http://gerasiov.net Skype: gerasiov PGP fingerprint: 04B5 9D90 DF7C C2AB CD49 BAEA CA87 E9E8 2AAC 33F1
Re: systemd в jessie умирает с SIGFPE
Как видно из /etc/inittab, для halt/reboot выполняются скрипт /etc/init.d/rc с аргументом 0 или 6. Это и есть штатный способ остановки системы. При чём тут inittab? В дефолтном jessie нет этого файла. Вызов /sbin/reboot эквивалентен "systemctl reboot", который стартует спец-юнит reboot.target.
Re: systemd в jessie умирает с SIGFPE
В сообщении от [Сб 2015-09-12 16:37 +0300] Yuriy M. Kaminskiyпишет: > Я только что нарвался на неприятный баг: на попытке перезапустить (не > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не > подбирает zombie, систему можно перезапустить только вручную (убив > процессы и перемонтировав fs в read-only; ну, или через > alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д. > > Я нашёл идентичный баг в багтрекире - > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774012 > но он помечен как fixed и archived. Хотя, очевидно, в jessie он > присутствует и *не* исправлен. Что с этим можно сделать (и можно ли)? Для повышение надежности системы, в systemd есть функциональность сторожевых таймеров (watchdog [1]). В случае возникновения проблем, systemd пытается привести систему в рабочее состояние, путем перезапуска отдельных сервисов или системы целиком. Здесь об этом подробнее [2]. [1] https://ru.wikipedia.org/wiki/Сторожевой_таймер [2] http://0pointer.de/blog/projects/watchdog.html -- http://google.com/+РусланКоротаев
Re: systemd в jessie умирает с SIGFPE
yum...@gmail.com (Yuriy M. Kaminskiy) writes: > Eugene Berdnikovwrites: > >> On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote: >>> On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote: >>> > Я только что нарвался на неприятный баг: на попытке перезапустить (не >>> > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном >>> > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом >>> > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не >>> >>> Ядро линукса не блокирует передачу таких сигналов процессу с pid=1. >> >> Оговорился. Наоборот, блокирует. :) > > Каких "таких"? SIGFPE? И что бы оно должно было делать по делению на > ноль? По факту, systemd этот сигнал получает, и реагирует зависанием > (зовёт freeze(), внутри которого он закрывает все дескрипторы и > крутится в for(;;) pause();, см. TFS). > > [...] kernel: [X.X] traps: systemd[1] trap > divide error ip:f772106f sp:ffabdaf4 error:0 in systemd[f765d000+13] > [...] systemd[1]: Caught , dumped core as pid 4661. > [...] systemd[1]: Freezing execution. > > (корку я посмотрел, backtrace идентичен #774012). > > Ожидаемая реакция systemd на SIGINT/SIGTERM и так далее прописана в > man systemd (SIGTERM эквивалентен systemctl daemon-reexec, SIGINT > эквивалентен systemctl reboot); в состоянии "намеренного зависания > внутри обработчика SIGFPE" systemd ни на какие сигналы не реагирует. ... в любом случае, вопрос не в деталях этого бага (всё необходимое есть в #774012, баг признан, локализован и исправлен в upstream), а в том что: Есть баг с Severity: important, в критичном компоненте системы, который: 1) был отправлен (не мной) *до* релиза jessie; 2) отмечен как исправленный (и даже ушёл в архив) в трекере; 3) *не был* тем не менее исправлен в jessie, исправленная версия отсутствует в jessie-backports, и так далее; 4) судя по всему, срабатывает случайно, никаких путей обхода или очевидных "а вы не делайте так" нет. WTF?
Re: systemd в jessie умирает с SIGFPE
Eugene Berdnikovwrites: > On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote: >> On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote: >> > Я только что нарвался на неприятный баг: на попытке перезапустить (не >> > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном >> > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом >> > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не >> >> Ядро линукса не блокирует передачу таких сигналов процессу с pid=1. > > Оговорился. Наоборот, блокирует. :) Каких "таких"? SIGFPE? И что бы оно должно было делать по делению на ноль? По факту, systemd этот сигнал получает, и реагирует зависанием (зовёт freeze(), внутри которого он закрывает все дескрипторы и крутиться в for(;;) pause();, см. TFS). [...] kernel: [X.X] traps: systemd[1] trap divide error ip:f772106f sp:ffabdaf4 error:0 in systemd[f765d000+13] [...] systemd[1]: Caught , dumped core as pid 4661. [...] systemd[1]: Freezing execution. (корку я посмотрел, backtrace идентичен #774012). Ожидаемая реакция systemd на SIGINT/SIGTERM и так далее прописана в man systemd (SIGTERM эквивалентен systemctl daemon-reexec, SIGINT эквивалентен systemctl reboot); в состоянии "намеренного зависания внутри обработчика SIGFPE" systemd ни на какие сигналы не реагирует.
Re: systemd в jessie умирает с SIGFPE
Руслан Коротаевwrites: > В сообщении от [Сб 2015-09-12 16:37 +0300] > Yuriy M. Kaminskiy пишет: > >> Я только что нарвался на неприятный баг: на попытке перезапустить (не >> полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном >> делении на 0 (точнее, намерено завис в обработчике сигнала). При этом >> systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не >> подбирает zombie, систему можно перезапустить только вручную (убив >> процессы и перемонтировав fs в read-only; ну, или через >> alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д. >> >> Я нашёл идентичный баг в багтрекире - >> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774012 >> но он помечен как fixed и archived. Хотя, очевидно, в jessie он >> присутствует и *не* исправлен. Что с этим можно сделать (и можно ли)? > > Для повышение надежности системы, в systemd есть функциональность > сторожевых таймеров (watchdog [1]). В случае возникновения проблем, > systemd пытается привести систему в рабочее состояние, путем перезапуска > отдельных сервисов или системы целиком. Здесь об этом подробнее [2]. > > [1] https://ru.wikipedia.org/wiki/Сторожевой_таймер > [2] http://0pointer.de/blog/projects/watchdog.html Проблема только в том, что в данном случае помер/завис сам systemd (pid=1). Перезапускать его некому.
Re: systemd в jessie умирает с SIGFPE
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
Re: systemd в jessie умирает с SIGFPE
On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote: > On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote: > > Я только что нарвался на неприятный баг: на попытке перезапустить (не > > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном > > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом > > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не > > Ядро линукса не блокирует передачу таких сигналов процессу с pid=1. Оговорился. Наоборот, блокирует. :) -- Eugene Berdnikov
systemd в jessie умирает с SIGFPE
Я только что нарвался на неприятный баг: на попытке перезапустить (не полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном делении на 0 (точнее, намерено завис в обработчике сигнала). При этом systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не подбирает zombie, систему можно перезапустить только вручную (убив процессы и перемонтировав fs в read-only; ну, или через alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д. Я нашёл идентичный баг в багтрекире - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774012 но он помечен как fixed и archived. Хотя, очевидно, в jessie он присутствует и *не* исправлен. Что с этим можно сделать (и можно ли)?
Re: systemd в jessie умирает с SIGFPE
12 сентября 2015 г., 19:37 пользователь Yuriy M. Kaminskiy написал: > systemd помер Туда ему дорога.