Почему я не могу остановить приложение Mojo с помощью systemd?

Я могу запустить мое приложение Mojo через systemd без каких-либо проблем, но я не могу остановить или перезапустить его в ту же сторону. Я браконьерствовал свою конфигурацию в основном из документов Mojo в http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Pre-forking:

[Unit]
Description=ldsquiz.org
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=30
ExecStart=/home/sites/www.ldsquiz.org/checkout/bin/carton-exec app.pl prefork -m production -l http://*:5103
KillMode=process
User=ldsquiz
Group=ldsquiz
SyslogIdentifier=ldsquiz-org

[Install]
WantedBy=multi-user.target 

если я остановлю его через sudo service ldsquiz-org stop тогда syslog говорит Jan 13 16:37:48 web-hosting systemd[1]: Stopped ldsquiz.org. но процессы все еще работает.

A restart via systemd похоже, я ожидал бы, так как сокет listen все еще используется из-за неудачное завершение работы:

Jan 13 16:39:13 web-hosting systemd[1]: Stopped ldsquiz.org.
Jan 13 16:39:13 web-hosting systemd[1]: Started ldsquiz.org.
Jan 13 16:39:14 web-hosting ldsquiz-org[20353]: Can't create listen socket: Address already in use at 
/home/sites/www.ldsquiz.org/checkout/local/lib/perl5/Mojo/IOLoop.pm line 126.
Jan 13 16:39:14 web-hosting systemd[1]: ldsquiz-org.service: Main process exited, code=exited, status=98/n/a
Jan 13 16:39:14 web-hosting systemd[1]: ldsquiz-org.service: Unit entered failed state.
Jan 13 16:39:14 web-hosting systemd[1]: ldsquiz-org.service: Failed with result 'exit-code'.
Jan 13 16:39:15 web-hosting ldsquiz-org[16886]: [Sat Jan 13 16:39:15 2018] [info] Creating process id file "/tmp/prefork.pid"

что я пропустила?

1 ответов


по-видимому, есть недостаток в Mojolicious Поваренная Книга w.r.т. блоки preforking и systemd.

они говорят::

и для управления предварительным разветвлением веб-сервера с помощью systemd вы можете использовать файл конфигурации блока, как это.

[Unit]
Description=My Mojolicious application
After=network.target

[Service]
Type=simple
ExecStart=/home/sri/myapp/script/my_app prefork -m production -l http://*:8080
KillMode=process

[Install]
WantedBy=multi-user.target

на KillMode=process настройка оказывается неправильной и должна быть заменена на KillMode=control-group - который является настройкой по умолчанию, поэтому мы можем удалить его в целом.

на KillMode docs говорят:

, если значение control-group, все остальные процессы в группе контроля этой единицы будут убиты на стопе блока (для обслуживаний: после стопа команда выполняется в соответствии с настройкой ExecStop=). если установлено process, только основной процесс сам убит.

(курсив мой)

таким образом:

[Unit]
Description=My Mojolicious application
After=network.target

[Service]
Type=simple
ExecStart=/home/sri/myapp/script/my_app prefork -m production -l http://*:8080
KillMode=control-group

[Install]
WantedBy=multi-user.target

отметим, что KillMode=control-group можно опустить, так как этот параметр является значением по умолчанию.

ссылки: