Systemd:启动操作超时。终止

问题描述 投票:0回答:5

我正在尝试为我的 python-flask-socketio 服务器创建自动启动服务。

我需要通过systemd启动一个python脚本。这是我的服务代码:

[Unit]
Description=AppName


[Service]
Type=forking
ExecStart=/usr/bin/python3 /opt/myapp/app.py

[Install]
WantedBy=multi-user.target

如果我尝试使用

sudo service myservice start
手动启动它 - 它工作得很好。它会停止我的终端\ssh 窗口,但我可以关闭它并且它按预期工作。

但是当我重新启动电脑时,它无法启动。当使用

systemctl status myservice
检查其状态时,我得到以下信息:

systemd[1]: Starting My Service...
systemd[1]: myserivce.service: Start operation timed out. Terminating.
systemd[1]: Failed to start My Service.
systemd[1]: myserivce.service: Unit entered failed state.
systemd[1]: myserivce.service: Failed with result 'timeout'.

我在这里做错了什么?

python ubuntu flask systemd flask-socketio
5个回答
34
投票

您的类型似乎错误,分叉适用于立即自行分离的程序。 Flask 没有,它保持连接到您的控制台。

您的服务类型可能应该是

simple


13
投票

设置更大的启动超时:

[Service]
TimeoutStartSec=300

如果您的服务实际上需要更多时间来完成启动。


0
投票

你必须检查/var/log/message。

启动服务后,如果你的脚本一开始正常工作,然后失败了,请尝试这个。

ExecStart=/usr/bin/bash -c '/usr/bin/python3 /opt/myapp/app.py'

0
投票

在我的特定情况下,我也有一个 Flask 应用程序并遇到了相同的错误,但它最初使用分叉类型工作,但最近在重新部署新容器后停止工作。 就我而言,问题在于 PIDFile 属性指向不再存在的先前容器。

在本节中: [服务]

有一个像这样的属性导致了我的问题:

PIDFile=/run/user/1000/containers/overlay-containers/b20a186570e8d177d86a649bab2a81c739ccea9bf5a157b5ea443700871587cf/userdata/conmon.pid

我能够通过运行命令找到正确的容器名称:

podman ps

然后我抓取了显示的容器 ID 的第一部分,然后将其与此位置中列出的相应子目录进行匹配:

/run/user/1000/containers/overlay-containers

将其更新为正确的容器 ID 后,我单独保留 fork 类型,运行命令:

systemctl --user daemon-reload
systemctl --user start [containername]

现在它按预期运行,并且不再认为它仍在启动而超时。


-5
投票

我真的花了一个小时才弄清楚这一点:o

© www.soinside.com 2019 - 2024. All rights reserved.