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

时间:2019-09-03 03:56:40

标签: django django-channels daphne

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

CRITICAL Listen failure: [Errno 13] Permission denied: '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.

1 个答案:

答案 0 :(得分:0)

我认为这是由于权限问题引起的。默认情况下,/ run目录归root拥有。因此,daphne套接字无法在/ 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