由于目录命令中的点 (.),Supervisord 未启动

Supervisord not starting due to dot (.) in directory command

我正在尝试设置主管,但很难让它正常工作。 尝试启动时出现 ModuleNotFoundError: No module named '/home/username/projects/myproject-1' 错误:

[2021-03-09 10:57:00 +0000] [197792] [INFO] Starting gunicorn 20.0.4
[2021-03-09 10:57:00 +0000] [197792] [INFO] Listening at: unix:/home/username/projects/myproject-1.10/myproject.sock (197792)
[2021-03-09 10:57:00 +0000] [197792] [INFO] Using worker: sync
[2021-03-09 10:57:00 +0000] [197795] [INFO] Booting worker with pid: 197795
[2021-03-09 10:57:00 +0000] [197795] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
    self.load_wsgi()
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
    return self.load_wsgiapp()
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/username/.virtualenvs/myproject-3.6/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named '/home/username/projects/myproject-1'
[2021-03-09 10:57:00 +0000] [197795] [INFO] Worker exiting (pid: 197795)
[2021-03-09 10:57:00 +0000] [197792] [INFO] Shutting down: Master
[2021-03-09 10:57:00 +0000] [197792] [INFO] Reason: Worker failed to boot.

我的配置文件如下:

[program:myproject]
directory=/home/username/projects/myproject-1.10
autostart=true
autorestart=true
user=username
stderr_logfile=/var/log/myproject.err.log
stdout_logfile=/var/log/myproject.out.log
command=/home/username/.virtualenvs/myproject-3.6/bin/gunicorn --workers 5 --bind unix:/home/username/projects/myproject-1.10/myproject.sock /home/username/projects/myproject-1.10/myproject_project.wsgi:application

我尝试更改为 directory='/home/username/projects/myproject-1.10'directory="/home/username/projects/myproject-1.10"(单引号和双引号)和 rereading/reloading supervisord,但无济于事。

作为解决方法,我可以在我调用的 wsgi 中设置目录,但为什么主管不希望目录名称中有一个点?

问题不在于 supervisord 或所提供的目录,而在于所提供的命令。

command=/home/username/.virtualenvs/myproject-3.6/bin/gunicorn --workers 5 --bind unix:/home/username/projects/myproject-1.10/myproject.sock /home/username/projects/myproject-1.10/myproject_project.wsgi:application

最后一部分不应该包含目录;它应该只是 myproject_project.wsgi:application。点被视为目录。根据 supervisord 配置,正确的目录已经 set/changed。