Django Can';t使用systemd运行uwsgi.ini文件
我正在尝试设置uwsgi.service,以便在带有Fedora24的Linode上运行systemd for Django 1.10 /etc/systemd/system/uwsgi.serviceDjango Can';t使用systemd运行uwsgi.ini文件,django,uwsgi,systemd,Django,Uwsgi,Systemd,我正在尝试设置uwsgi.service,以便在带有Fedora24的Linode上运行systemd for Django 1.10 /etc/systemd/system/uwsgi.service [Unit] Description=uWSGI Emperor After=syslog.target [Service] ExecStart=/home/ofey/djangoenv/bin/uwsgi --ini /etc/uwsgi/emperor.ini Restart=always
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
ExecStart=/home/ofey/djangoenv/bin/uwsgi --ini /etc/uwsgi/emperor.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
这就应该叫,,
/etc/uwsgi/emporer.ini
[uwsgi]
emperor = /etc/uwsgi/vassals
uid = www-data
gid = www-data
limit-as = 1024
logto = /tmp/uwsgi.log
然后我使用一个符号链接
$ sudo ln -s /home/ofey/djangoForum/django.ini /etc/uwsgi/vassals/
到
/home/ofey/djangoform/django.ini
[uwsgi]
project = djangoForum
base = /home/ofey
chdir = %(base)/%(project)
home = %(base)/djangoenv
module = crudProject.wsgi:application
master = true
processes = 2
socket = 127.0.0.1:3031
chmod-socket = 664
vacuum = true
我重新开始了所有的工作
$ sudo systemctl daemon-reload
$ sudo systemctl restart nginx.service
$ sudo systemctl retart uwsgi.service
最后一个命令给出
Job for uwsgi.service failed because the control process exited with error code. See "systemctl status uwsgi.service" and "journalctl -xe" for details.
$ sudo systemctl status uwsgi.service
给
● uwsgi.service - uWSGI Emperor
Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Dec 07 23:56:28 ofeyspi systemd[1]: Starting uWSGI Emperor...
Dec 07 23:56:28 ofeyspi uwsgi[7834]: [uWSGI] getting INI configuration from /etc/uwsgi/emperor.ini
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Main process exited, code=exited, status=1/FAILURE
Dec 07 23:56:28 ofeyspi systemd[1]: Failed to start uWSGI Emperor.
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Unit entered failed state.
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Failed with result 'exit-code'.
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Service hold-off time over, scheduling restart.
Dec 07 23:56:28 ofeyspi systemd[1]: Stopped uWSGI Emperor.
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Start request repeated too quickly.
Dec 07 23:56:28 ofeyspi systemd[1]: Failed to start uWSGI Emperor.
我不明白为什么uwsgi.service不能运行
uwsgi在我没有通过systemd而是使用
$sudo--ini django.ini建议将RuntimeDirectory=uwsgi
添加到您的服务文件中。试着加上这个
[uwsgi]
project = djangoForum
base = /home/ofey
chdir = %(base)/%(project)
home = %(base)/djangoenv
module = crudProject.wsgi:application
master = true
processes = 2
socket = 127.0.0.1:3031
chmod-socket = 664
vacuum = true
还要检查/tmp/uwsgi.log
,查看是否在那里生成了日志记录 建议将RuntimeDirectory=uwsgi
添加到您的服务文件中。试着加上这个
还要检查
/tmp/uwsgi.log
,查看是否在那里生成了日志记录 最可能的原因是皇帝不能:
--logto
选项指定的日志文件(/tmp/uwsgi.log)ExecStart
命令,而不是以root身份运行,并查看输出:
$ /home/ofey/djangoenv/bin/uwsgi --ini /etc/uwsgi/emperor.ini
如果输出显示问题是权限问题,请尝试以下操作
由于您将代表www-data
用户运行服务器,正如前面所建议的,请确保:
[Service]
User=www-data
Group=www-data
RuntimeDirectory=uwsgi
在您的systemd单元配置中。然后,通过将其添加到vassals.ini文件中,确保在该目录下(即/run/uwsgi下)创建.pid文件和unix套接字文件(如果有):
runtime_dir = /run/uwsgi
pidfile=%(runtime_dir)/%n.pid
# if you prefer using unix-socket instead of a port
socket = %(runtime_dir)/%n.sock
# trying to chmod-socket is useless with a port, by the way
chmod-socket = 664
给定示例中的%n
变量表示vassal的.ini文件名,不带扩展名(请参阅)
最后,确保皇帝和诸侯国的配置中指定的--logto
文件可以通过这样的方式写入
请注意,如果您以root用户身份运行
uwsgi--ini/etc/uwsgi/employer.ini
,然后使用ctrl+D终止procecc,则会使上述临时文件存在,并且归root用户所有,这将阻止其他所有者(如www数据)向其写入,直到您删除这些文件或再次删除它们。最可能的原因是皇帝无法:
--logto
选项指定的日志文件(/tmp/uwsgi.log)ExecStart
命令,而不是以root身份运行,并查看输出:
$ /home/ofey/djangoenv/bin/uwsgi --ini /etc/uwsgi/emperor.ini
如果输出显示问题是权限问题,请尝试以下操作
由于您将代表www-data
用户运行服务器,正如前面所建议的,请确保:
[Service]
User=www-data
Group=www-data
RuntimeDirectory=uwsgi
在您的systemd单元配置中。然后,通过将其添加到vassals.ini文件中,确保在该目录下(即/run/uwsgi下)创建.pid文件和unix套接字文件(如果有):
runtime_dir = /run/uwsgi
pidfile=%(runtime_dir)/%n.pid
# if you prefer using unix-socket instead of a port
socket = %(runtime_dir)/%n.sock
# trying to chmod-socket is useless with a port, by the way
chmod-socket = 664
给定示例中的%n
变量表示vassal的.ini文件名,不带扩展名(请参阅)
最后,确保皇帝和诸侯国的配置中指定的--logto
文件可以通过这样的方式写入
请注意,如果您以root用户身份运行
uwsgi--ini/etc/uwsgi/employer.ini
,然后使用ctrl+D终止procecc,则会使上述临时文件存在,并且归root用户所有,这将阻止其他所有者(如www数据)向其写入,直到您删除这些文件或再次删除它们。注释掉KillSignal=SIGQUIT
它可能会导致问题,请参阅
还导致Centos 7出现问题注释掉
KillSignal=SIGQUIT
它可能会导致问题,请参阅
如果您
stat
项目所在的文件夹,则在Centos 7上也会导致问题,该文件夹的所有者是谁?是www数据、根用户还是其他用户?当您使用sudo运行它时,它会工作,这让我想知道它是否基于权限。如果您stat
项目所在的文件夹,谁拥有它?是www数据、根用户还是其他用户?当你用sudo运行它时,它会工作,这让我怀疑它是否基于权限。我已经添加了这一点,谢谢。但是ExecStart=/root/uwsgi/uwsgi--ini/etc/uwsgi/employer.ini应该引用virtualenv或系统中的uwsgi文件吗?那么应该是/usr/local/share/applications/test_project/bin,它是virtualenv还是我位于/usr/bin/uwsgi的系统上的uwsgi二进制文件?我已经在新的virtualenv中重新安装了Django,地址是/usr/local/share/applications/test_project/也在你提到的uwsgi systemd文档中说“小心一些systemd版本(例如Debian Jessie中的215),因为SIGQUIT信号会破坏systemd服务。在那里使用KillSignal=SIGTERM+“die on term”uwsgi选项。”我想知道这是否也是一个问题?我已经补充了,谢谢。但是ExecStart=/root/uwsgi/uwsgi--ini/etc/uwsgi/employer.ini呢