我正在尝试使用Gunicorn / nginx / supervisor部署Django 1.5,但在这个阶段,我只是想让Gunicorn正确启动。
我尝试从命令行开始:
gunicorn project.wsgi:application --workers 3 --user=django --group=django --bind=127.0.0.1:8100
它失败了
OSError: [Errno 1] Operation not permitted: '/tmp/wgunicorn-c7BU9r'
traceback:
2013-11-01 20:03:24 [17860] [INFO] Starting gunicorn 18.0
2013-11-01 20:03:24 [17860] [INFO] Listening at: http://127.0.0.1:8000 (17860)
2013-11-01 20:03:24 [17860] [INFO] Using worker: sync
Traceback (most recent call last):
File "/opt/envs/bedlounge-front/bin/gunicorn", line 9, in <module>
load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')()
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 71, in run
WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/app/base.py", line 143, in run
Arbiter(self).run()
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/arbiter.py", line 175, in run
self.manage_workers()
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/arbiter.py", line 470, in manage_workers
self.spawn_workers()
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/arbiter.py", line 529, in spawn_workers
self.spawn_worker()
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/arbiter.py", line 482, in spawn_worker
self.cfg, self.log)
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/workers/base.py", line 49, in __init__
self.tmp = WorkerTmp(cfg)
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/workers/workertmp.py", line 25, in __init__
util.chown(name, cfg.uid, cfg.gid)
File "/opt/envs/bedlounge-front/lib/python2.7/site-packages/gunicorn/util.py", line 157, in chown
os.chown(path, uid, gid)
OSError: [Errno 1] Operation not permitted: '/tmp/wgunicorn-c7BU9r'
如果我在启动时没有使用user和group参数(作为我的常规用户),它启动起来就很好。我的理解是,我会想在另一个用户或组下开始这个然而。
有人能帮我解决我做错的事吗?或者任何能帮我破案的信息?
谢谢!
2条答案
按热度按时间gstyhher1#
问题可能在于您的userid试图以另一个用户的身份启动进程。我假设您已经在操作系统中创建了用户和组。您可以以root用户身份尝试以前的命令或使用
sudo
。我使用以下Supervisor配置,它在命令行上指定用户,并将其作为一个选项:
xmjla07d2#
解决此问题的一种方法是更改运行
gunicorn
的用户 * 和组 * ID,以匹配系统/容器UID和GID**:发生这种情况的一种情况是,当
--group
设置为0或任何其他不同于安装gunicorn
的文件夹中使用的值时,您使用gunicorn
启动python应用程序(它似乎试图将其临时文件写入错误消息中显示的/tmp
文件夹)。奇怪的是,这个明显的
gunicorn
错误甚至在今天仍然存在(6年后,在Python(3.11),Ubuntu(22.04 LTS)和gunicorn
(20.1.0)的最新稳定版本下)。Django没有参与其中(Flask也是如此)。