【问题标题】:Active: failed (Result: service-start-limit-hit)活动:失败(结果:服务启动限制命中)
【发布时间】:2020-05-31 20:52:14
【问题描述】:

在我部署 python 项目的任务中,我已经完成了 gunicorn 设置。

检查 gunicorn 状态文件(我今天早些时候刚刚运行了这个命令,它返回了以下内容):

sudo systemctl status gunicorn.socket
Failed to dump process list, ignoring: No such file or directory
● gunicorn.socket - gunicorn socket
   Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Sun 2020-02-16 21:42:10 UTC; 1min 16s ago
   Listen: /run/gunicorn.sock (Stream)
   CGroup: /system.slice/gunicorn.socket

我刚才去运行这个命令,结果不一样:

sudo systemctl status gunicorn.socket
● gunicorn.socket - gunicorn socket
   Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor preset: enabled)
   Active: failed (Result: service-start-limit-hit) since Sun 2020-02-16 21:45:01 UTC; 28min ago
   Listen: /run/gunicorn.sock (Stream)

Feb 16 21:42:10 ubuntu-s-1vcpu-1gb-nyc3-01 systemd[1]: Listening on gunicorn socket.
Feb 16 21:45:01 ubuntu-s-1vcpu-1gb-nyc3-01 systemd[1]: gunicorn.socket: Failed with result 'service-st
lines 1-7/7 (END)

我跑了systemctl restart ssh,这并没有解决问题。

有人知道这是什么原因吗?

【问题讨论】:

  • 这种情况有什么解决办法吗?

标签: service gunicorn systemd


【解决方案1】:

我在 3 天前遇到了这样的问题。检查/var/log/syslog是解决问题的第一种方法。主要是因为 gunicorn 或 nginx(或您使用的任何 Web 服务器)中的配置错误。我按照this link中的说明进行操作

假设您有这样的文件夹结构(在我的假设中,您安装了 django 并使用 wsgi):

  1. /home/user/venv/myvenv -> 你的虚拟环境目录
  2. /home/user/venv/myvenv/myproject -> 你的项目目录
  3. /home/user/venv/myvenv/bin/gunicorn -> 通过 pip 安装后的 gunicorn 文件


如果你创建 gunicorn 服务文件(比如 /etc/systemd/system/gunicorn.service),将文件 gunicorn.sock 放在 /run/gunicorn.sock 中,你可以按照下面的配置或类似的配置:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=user
Group=www-data
WorkingDirectory=/home/user/venv/myvenv/myproject
ExecStart=/home/user/venv/myvenv/bin/gunicorn \
    --access-logfile - \
    --workers 3 \
    --bind unix:/run/gunicorn.sock \
    myproject.wsgi:application

[Install]
WantedBy=multi-user.target

请注意,myproject 是您的 python 项目。有时,它不起作用,因为 gunicorn 不知道 myproject 文件夹位置。你可以在 ExecStart 中添加--chdir 选项,变成这样:

ExecStart=/home/user/venv/myvenv/bin/gunicorn \
    --access-logfile - \
    --workers 3 \
    --bind unix:/run/gunicorn.sock \
    --chdir /home/user/venv/myvenv/myproject \
    myproject.wsgi:application

--chdir 用于指向项目文件夹。不要忘记在每次更改 gunicorn.service 之前重新加载服务,然后再重新启动它。

$ sudo systemctl daemon-reload

然后:

$ sudo systemctl restart gunicorn

不要与 myproject.wsgi 混淆。这不是文件名。它将调用 myproject 文件夹中的文件 wsgi。

【讨论】:

  • > WorkingDirectory=/home/user/venv/myvenv/myproject 为什么你的项目/工作目录在venv/myenv/ 下?我的.venvmyproject在同一个目录下,不在我的虚拟环境目录下。这很奇怪。
  • 因为我需要一个简单的方法来做到这一点。将我的项目目录放在 virtualenv 目录下。只要您可以连接您使用的虚拟环境,您就可以将您的工作目录放在任何地方。我把我的笔记放在我的回答中:“......您可以按照下面的配置或类似的配置......”。 VENV 是我使用虚拟环境的所有项目的文件夹。 MYENV 是我特定环境的文件夹。 MYPROJECT 是我的项目的一个文件夹,使用 MYENV 作为虚拟环境。
【解决方案2】:

当 gunicorn 将状态从活动更改为失败时,您需要了解它发生了什么。 用sudo systemctl restart gunicorn.socket激活它后用sudo tail -f /var/log/syslog检查

尝试访问您的网站或 gunicorn 正在执行的任何操作,它应该会更改状态并在 syslog 中打印更多信息。

如果 gunicorn 是 python 环境中的午餐,请尝试重新安装环境,例如 this case

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2017-08-08
    • 2020-05-23
    • 2016-12-30
    • 2021-11-30
    • 2016-07-04
    相关资源
    最近更新 更多