django - 尝试启动 Daphne systemctl 进程时权限被拒绝

标签 django django-channels daphne

我正在使用 Django 和 Django-Channels 部署一个网站,使用 Channel 的 daphne ASGI 服务器替代典型的 Gunicorn WSGI 设置。使用 this Gunicorn WSGI tutorial作为入门指南,当我遇到以下错误时,我试图为我的 daphne 服务器编写 systemctl 服务:

CRITICAL 监听失败:[Errno 13] 权限被拒绝:'27646' -> b'/run/daphne.sock.lock'

不幸的是,我找不到任何关于为什么拒绝对 .sock 文件的权限的答案,(在 Daphne 的上下文中)所以我希望我能得到一些关于从哪里开始调试的提示这个问题。下面是我的 daphne.socket 和我的 daphne.service 文件。

daphne.service

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

[Service]
User=brianl
Group=www-data
WorkingDirectory=/home/brianl/autoXMD
ExecStart=/home/brianl/autoXMD/env/bin/daphne -u /run/daphne.sock -b 0.0.0.0 -p 8000 autoXMD.asgi:application
[Install]
WantedBy=multi-user.target

daphne.socket

[Unit]
Description=daphne socket

[Socket]
ListenStream=/run/daphne.sock

[Install]
WantedBy=sockets.target

根据链接的 DigitalOcean 教程,我使用 sudo systemctl start daphne.socket 启动我的服务。

我的猜测是,我错过了为 Gunicorn 和 Daphne 设置 systemctl 服务之间存在某种差异,但我不确定。

(如果有帮助,我打算使用Nginx作为主服务器,但我还没有到那个地步)

编辑:

如果我还附加了 systemd 给出的完整输出,那将会有所帮助:

● daphne.service - daphne daemon
   Loaded: loaded (/etc/systemd/system/daphne.service; enabled; vendor preset: enabled)
   Active: failed (Result: start-limit-hit) since Thu 2019-09-05 22:00:43 UTC; 1min 51s ago
  Process: 22041 ExecStart=/home/brianl/autoXMD/env/bin/daphne -u /run/daphne.sock -b 0.0.0.0 -p 8000 autoXMD.asgi:application (code=exited, status=0/SUCCESS)
 Main PID: 22041 (code=exited, status=0/SUCCESS)

Sep 05 22:00:43 autoxmd daphne[22041]:   warnings.warn('%s.  joblib will operate in serial mode' % (e,))
Sep 05 22:00:43 autoxmd daphne[22041]: 2019-09-05 22:00:43,013 INFO     Starting server at tcp:port=8000:interface=0.0.0.0, unix:/run/daphne.sock
Sep 05 22:00:43 autoxmd daphne[22041]: 2019-09-05 22:00:43,017 INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)
Sep 05 22:00:43 autoxmd daphne[22041]: 2019-09-05 22:00:43,020 INFO     Configuring endpoint tcp:port=8000:interface=0.0.0.0
Sep 05 22:00:43 autoxmd daphne[22041]: 2019-09-05 22:00:43,022 INFO     Listening on TCP address 0.0.0.0:8000
Sep 05 22:00:43 autoxmd daphne[22041]: 2019-09-05 22:00:43,022 INFO     Configuring endpoint unix:/run/daphne.sock
Sep 05 22:00:43 autoxmd daphne[22041]: 2019-09-05 22:00:43,022 CRITICAL Listen failure: [Errno 13] Permission denied: '22041' -> b'/run/daphne.sock.lock'
Sep 05 22:00:43 autoxmd systemd[1]: daphne.service: Start request repeated too quickly.
Sep 05 22:00:43 autoxmd systemd[1]: daphne.service: Failed with result 'start-limit-hit'.
Sep 05 22:00:43 autoxmd systemd[1]: Failed to start daphne daemon.

最佳答案

我认为这是由于权限问题而发生的。默认情况下/run 目录归 root 所有。所以daphne socket在/run目录下创建daphne.sock.lock文件失败。

解决方案是在/run 目录中创建一个文件夹,并为您的用户和组授予权限。

例如:

sudo mkdir /run/daphne
sudo chown brianl:www-data /run/daphne

现在更改服务和套接字文件中的 Unix 套接字路径。

daphne.service

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

[Service]
User=brianl
Group=www-data
WorkingDirectory=/home/brianl/autoXMD
ExecStart=/home/brianl/autoXMD/env/bin/daphne -u /run/daphne/daphne.sock -b 0.0.0.0 -p 8000 autoXMD.asgi:application
[Install]
WantedBy=multi-user.target

daphne.socket

[Unit]
Description=daphne socket

[Socket]
ListenStream=/run/daphne/daphne.sock

[Install]
WantedBy=sockets.target

希望这对您有用。如需进一步了解,您可以解决类似问题 MySQL Daemon Lock issue

关于django - 尝试启动 Daphne systemctl 进程时权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764861/

相关文章:

python - 同时编辑两个具有外键关系的 Django 模型的表单

django - 如何扩展django管理员 View ?

python - Django 从没有外键关系的多个表中检索数据

django - 使用 Apache 引导流量在类生产环境中为 Django channel 提供服务

python - Django Channels 显示房间中的当前用户

python - 通过 Django-celery 安排数千个一次性(非经常性)任务以近乎同时执行

django-channels - Django Channels 组发送(不包括数据发送者)

python - 在 Daphne - SSL 上使用 channel 部署 django 应用程序

django - Uvicorn 在接受连接前直接关闭连接时不关闭连接

django - 达芙妮 channel 2和Redis层的CPU使用率高