django Gunicorn在启动时抛出OSError Errno 1

rseugnpd  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(130)

我正在尝试使用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参数(作为我的常规用户),它启动起来就很好。我的理解是,我会想在另一个用户或组下开始这个然而。
有人能帮我解决我做错的事吗?或者任何能帮我破案的信息?
谢谢!

gstyhher

gstyhher1#

问题可能在于您的userid试图以另一个用户的身份启动进程。我假设您已经在操作系统中创建了用户和组。您可以以root用户身份尝试以前的命令或使用sudo
我使用以下Supervisor配置,它在命令行上指定用户,并将其作为一个选项:

[program:gunicorn]
command=/opt/mysite/virtual_env/bin/python \
    /opt/mysite/virtual_env/bin/gunicorn_django -w 2 --user=appsrun
directory = /opt/mysite/virtual_env/app/
user = appsrun
xmjla07d

xmjla07d2#

解决此问题的一种方法是更改运行gunicorn的用户 * 和组 * ID,以匹配系统/容器UID和GID**:

$ gunicorn --user $(id -u) --group $(id -g) [..] app:app

发生这种情况的一种情况是,当--group设置为0或任何其他不同于安装gunicorn的文件夹中使用的值时,您使用gunicorn启动python应用程序(它似乎试图将其临时文件写入错误消息中显示的/tmp文件夹)。
奇怪的是,这个明显的gunicorn错误甚至在今天仍然存在(6年后,在Python(3.11),Ubuntu(22.04 LTS)和gunicorn(20.1.0)的最新稳定版本下)。Django没有参与其中(Flask也是如此)。

相关问题