【发布时间】:2018-06-22 20:17:08
【问题描述】:
我可以通过systemd 毫无问题地启动我的 Mojo 应用程序,但我无法以同样的方式停止或重新启动它。我主要从http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Pre-forking 的 Mojo 文档中偷走了我的配置:
[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 停止它,那么系统日志会显示Jan 13 16:37:48 web-hosting systemd[1]: Stopped ldsquiz.org.,但进程仍在运行。
restart 通过systemd 看起来像我预期的那样,因为由于关闭失败,侦听套接字仍在使用中:
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"
我在这里错过了什么?
【问题讨论】:
-
我通常用
systemctl start/stop/status/restart $serviceName控制我的systemd单元。这有什么区别吗? IE。systemctl stop ldsquiz-org? -
@PerlDuck 对我来说似乎有同样的问题。它认为该应用程序已停止,但原始进程仍在徘徊。
-
@PerlDuckwonderful!
KillMode=control-group为我做了诀窍。看起来我需要查看有关 Mojo 文档补丁的信息。如果您想写一个答案,我很乐意接受。 -
作为附录,此问题现已在 Mojo 文档中得到解决:github.com/kraih/mojo/commit/…
标签: perl systemd mojolicious