LINUX.ORG.RU

Перезагрузка сервиса в Debian 9

 


0

1

Уважаемые гуру, подскажите где «копать». Есть сервис, который нужно по необходимости перезагружать (рестарт). На прежних версиях Debian это выполнялось следующей командой буквально за секунду:

sudo /etc/init.d/name_service restart

Сейчас для перезагрузки используется команда:

sudo systemctl restart name_service

и перезагрузка сервиса длиться почти две минуты. С помощью команд:

sudo systemctl stop name_service
sudo systemctl start name_service

определил, что все это время уходит именно на остановку сервиса, старт после остановки выполняется сразу. Вопрос в следующем - что не дает сервису сразу выполнить остановку?

Запусти параллельно в соседнем терминале journalctl -f и посмотри что пишется при остановке сервиса.

imul ★★★★★ ()
Ответ на: комментарий от imul

Спасибо!

Проверил. Я так понимаю, что проблема в Питоне? При остановке он не отвечает и systemctl «убивает» сервис по тайм-ауту?

R=root ; COMMAND=/bin/systemctl stop webiopi.service
Sep 14 21:11:55 raspberrypi sudo[934]: pam_unix(sudo:session): session opened fo                                                                             r user root by pi(uid=0)
Sep 14 21:11:55 raspberrypi systemd[1]: Stopping WebIOPi...
Sep 14 21:11:55 raspberrypi python3[416]: 2017-09-14 21:11:55 - WebIOPi - INFO -                                                                              Stopping...
Sep 14 21:13:25 raspberrypi systemd[1]: webiopi.service: State 'stop-sigterm' timed out. Killing.
Sep 14 21:13:25 raspberrypi systemd[1]: webiopi.service: Killing process 416 (python3) with signal SIGKILL.
Sep 14 21:13:25 raspberrypi systemd[1]: webiopi.service: Main process exited, code=killed, status=9/KILL
Sep 14 21:13:25 raspberrypi systemd[1]: Stopped WebIOPi.
Sep 14 21:13:25 raspberrypi systemd[1]: webiopi.service: Unit entered failed state.
Sep 14 21:13:25 raspberrypi systemd[1]: webiopi.service: Failed with result 'timeout'.
Sep 14 21:13:25 raspberrypi sudo[934]: pam_unix(sudo:session): session closed for user root
Sep 14 21:17:01 raspberrypi CRON[947]: pam_unix(cron:session): session opened for user root by (uid=0)
Sep 14 21:17:01 raspberrypi CRON[951]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Sep 14 21:17:01 raspberrypi CRON[947]: pam_unix(cron:session): session closed for user root
Barracuda ()
Ответ на: Спасибо! от Barracuda

Не сам питон конечно, а питоновский скрипт сервиса. А какая в .service файле команда для «убиения»?

imul ★★★★★ ()
Ответ на: комментарий от imul

Вот файл webiopi.service. Или это не здесь?

[Unit]
Description = WebIOPi
After = syslog.target network.target

[Service]
Type = simple
WorkingDirectory = /usr/share/webiopi/htdocs
ExecStart = /usr/bin/python3 -m webiopi -l /var/log/webiopi -c /etc/webiopi/config

[Install]
WantedBy = multi-user.target
Barracuda ()
Ответ на: комментарий от Barracuda

У него вообще стопа нет.
Попробуй вставить в [Service] такую строку:
ExecStop = /bin/kill -15 $(ps a | awk '/m\ webiopi/{ print $1 }')
Если -15 не поможет, то -9.

imul ★★★★★ ()
Ответ на: комментарий от imul

К сожалению, не помогло :( Но, в любом случае, получается, что в файле нет строки остановки сервиса?

Barracuda ()
Ответ на: комментарий от Barracuda

Почему не помогло? На что-нибудь ругалось?
ps a | awk '/m\ webiopi/{ print $1 }' пид питоновский показывает?
По идее при отсутствии строки команды остановки systemd при остановке должен слать sigterm питону.

imul ★★★★★ ()
Ответ на: комментарий от imul

Да, ругается на команду kill:

Sep 14 22:57:48 raspberrypi systemd[1]: Stopping WebIOPi...
Sep 14 22:57:48 raspberrypi kill[620]: kill: failed to parse argument: 'a'
Sep 14 22:57:48 raspberrypi systemd[1]: webiopi.service: Control process exited,                                                                              code=exited status=1
Sep 14 22:57:48 raspberrypi python3[434]: 2017-09-14 22:57:48 - WebIOPi - INFO -                                                                              Stopping...
Sep 14 22:59:19 raspberrypi systemd[1]: webiopi.service: State 'stop-sigterm' timed out. Killing.
Sep 14 22:59:19 raspberrypi systemd[1]: webiopi.service: Killing process 434 (python3) with signal SIGKILL.
Sep 14 22:59:19 raspberrypi systemd[1]: webiopi.service: Main process exited, code=killed, status=9/KILL
Sep 14 22:59:19 raspberrypi systemd[1]: Stopped WebIOPi.
Sep 14 22:59:19 raspberrypi systemd[1]: webiopi.service: Unit entered failed state.
Sep 14 22:59:19 raspberrypi systemd[1]: webiopi.service: Failed with result 'exit-code'.
Sep 14 22:59:19 raspberrypi sudo[614]: pam_unix(sudo:session): session closed for user root
Barracuda ()
Ответ на: комментарий от Barracuda

Вроде бы заработало

Изменил останов следующим образом:

ExecStop=/bin/kill -KILL $MAINPID

Вроде бы все работает. imul, огромное спасибо за помощь и наставление на путь истинный.

Barracuda ()
Ответ на: комментарий от Barracuda

kill: failed to parse argument: 'a'

Эх... Надо было /bin/ps и /bin/awk

/bin/kill -KILL $MAINPID

Пришло время перечитать документацию

imul ★★★★★ ()
Ответ на: Вроде бы заработало от Barracuda

Re: Вроде бы заработало

Посылать сразу SIGKILL как бы не совсем правильно ;)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.