我正在使用 Ubuntu Server 16.04。
这是.service
文件:
[Unit]
Description=NoDescpt
[Service]
ExecStart=/home/git/cmd/daphnei
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
以及相关脚本/home/git/cmd/daphnei
:
#!/bin/bash
cd /home/git/hsfzmun/server
/home/git/virtualenvs/hsfzmun/bin/daphne -b 0.0.0.0 -p 8001 -v2 config.asgi:channel_layer
令我困惑的是该服务每 90 秒就会重新启动一次,但我找不到原因。
我发现服务的状态始终为activating
,这意味着systemd
不知道服务已启动。但是脚本做过因为我可以访问我的网站。那么它有什么问题呢?
答案1
您正在使用
Type=Notify
在您的单元文件中。这意味着应用程序应在准备好通过以下方式提供服务时通知 systemd:sd-通知 Systemd 可能没有收到来自您的应用程序的通知并重新启动它。
除非你的应用程序向 systemd 发送通知,否则你应该更新相应的行
Type=simple
其他选项是检查是否daphne
可以向 systemd 发送通知并打开通知。
查看有关通知的 systemd 文档了解更多详情Type=notify
答案2
由于它没有在 90 秒内(默认启动超时)声明它已准备就绪,因此 systemd 已确定您的服务已失败。失败的服务将导致所有服务被终止。
由于Restart=always
,您的失败服务将重新启动,并重复该循环。
此外,Restart=on-failure
在这种情况下可能会更好。