我在配置 gunicorn 时遇到了困难。到目前为止,我已经将我的 django 代码拉到服务器上,为 python3.6 创建了一个虚拟环境,安装了 django gunicorn psycop2,使用 pip3,一切正常。
我可以运行 django 开发服务器并查看我的未样式化站点,并且已通过管理站点成功发布到数据库,因此一切正常。然后我直接使用以下命令启动它:
gunicorn django_version.wsgi:application --bind 10.88.58.95:80
并再次能够看到我的未设置样式的网站。我还尝试过:
/srv/pcc_django/django_env/bin/gunicorn --workers 3 --bind unix:/srv/pcc_django/django_version/django_version.sock django_version.wsgi:application
并且一切开始都没有错误。所以我的下一步是编写一个 .service 文件:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=user
Group=nginx
WorkingDirectory=/srv/pcc_django
ExecStart=/srv/pcc_django/django_env/bin/gunicorn --workers 3 --bind unix:/srv/pcc_django/django_version/django_version.sock django_version.wsgi:application
[Install]
WantedBy=multi-user.target
并尝试:
systemctl start gunicorn.service
我收到上述错误消息,它提示我执行以下操作:
systemctl status gunicorn.service
还有以下信息:
● gunicorn.service - gunicorn daemon
Loaded: error (Reason: Bad message)
Active: inactive (dead) since Thu 2019-10-17 08:39:02 UTC; 3h 16min ago
Main PID: 29080 (code=exited, status=0/SUCCESS)
Oct 16 16:24:08 pcc-home-page.novalocal gunicorn[29080]: [2019-10-16 16:24:08 +0000] [29085] [INFO] Booting worker with pid: 29085
Oct 16 16:24:08 pcc-home-page.novalocal gunicorn[29080]: [2019-10-16 16:24:08 +0000] [29086] [INFO] Booting worker with pid: 29086
Oct 17 08:39:02 pcc-home-page.novalocal systemd[1]: Stopping gunicorn daemon...
Oct 17 08:39:02 pcc-home-page.novalocal gunicorn[29080]: [2019-10-17 08:39:02 +0000] [29084] [INFO] Worker exiting (pid: 29084)
Oct 17 08:39:02 pcc-home-page.novalocal gunicorn[29080]: [2019-10-17 08:39:02 +0000] [29080] [INFO] Handling signal: term
Oct 17 08:39:02 pcc-home-page.novalocal gunicorn[29080]: [2019-10-17 08:39:02 +0000] [29085] [INFO] Worker exiting (pid: 29085)
Oct 17 08:39:02 pcc-home-page.novalocal gunicorn[29080]: [2019-10-17 08:39:02 +0000] [29086] [INFO] Worker exiting (pid: 29086)
Oct 17 08:39:02 pcc-home-page.novalocal gunicorn[29080]: [2019-10-17 08:39:02 +0000] [29080] [INFO] Shutting down: Master
Oct 17 08:39:02 pcc-home-page.novalocal systemd[1]: Stopped gunicorn daemon.
Oct 17 08:39:14 pcc-home-page.novalocal systemd[1]: [/etc/systemd/system/gunicorn.service:12] Missing '='.
但有些奇怪的事情发生了,因为如果我这样做:
date +%H:%M:%S.%N
我得到以下时间戳:
11.57.13.124995238
所以我不确定此消息是否与 gunicorn 服务无法正确启动有关。我错过了什么导致 gunicorn 无法作为服务启动?
答案1
这里的问题是我没有 gunicorn.socket 文件,而这是服务文件中必需的。将以下文件添加到与服务文件相同的文件夹中:
/etc/systemd/system/
gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=multi-user.target
修复了问题的第一部分,然后更正了 .service 文件中的 .sock 文件位置(原始帖子上方),最后我还在服务文件的顶部添加了一个 shebang。更改位于 [Service] 部分顶部的第 1 行和第 11 行中间:
#!/bin/sh
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=user
Group=nginx
WorkingDirectory=/srv/pcc_django
ExecStart=/srv/pcc_django/django_env/bin/gunicorn --workers 3 --bind unix:/run/gunicorn.sock django_version.wsgi:application
[Install]
WantedBy=multi-user.target
还要确保 .sock 文件的命名一致,我将其命名为“gunicorn.socket”,因此在路径中它被称为“gunicorn.sock”,在大多数教程中,它们将其命名为:
project_name.sock
并将其放在项目根文件夹中,还有人提到将其与代码放在一起存在安全问题,我发现与文件所在位置相比,知道文件的名称会让人感到困惑。因此,将其命名为 gunicorn.socket 对我来说更有意义,而且在 CLI 上很容易看到,因为它不会与文件路径混淆。