我正在按照这个(非常好的)DigitalOcean 教程了解如何使用 Gunicorn 提供 Flask 应用程序,但无法让 Systemd 运行myproject.service
。
我创建了一个 python 环境 (venv),pip 安装了 gunicorn 和 flask,编写了 myproject.py 和 wsgi.py,并检查所有程序是否可执行。当我运行以下命令时:
(venv) dconran@dconran-VirtualBox:~/python/dg$ /home/dconran/python/dg/venv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app
从命令行,无论是在 Python 环境中还是在停用后,一切都运行正常,我可以访问网页。但是当我运行sudo systemctl start myproject
当我这样做时,我收到以下错误消息sudo systemctl status myproject
:
× myproject.service - Gunicorn instance to serve myproject
Loaded: loaded (/etc/systemd/system/myproject.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Fri 2025-02-14 12:40:11 GMT; 23s ago
Duration: 12ms
Main PID: 6526 (code=exited, status=2)
CPU: 5ms
Feb 14 12:40:11 dconran-VirtualBox systemd[1]: Started myproject.service - Gunicorn instance to serve myproject.
Feb 14 12:40:11 dconran-VirtualBox bash[6527]:
/home/dconran/python/dg/venv/bin/gunicorn: line 3: import: command not found
Feb 14 12:40:11 dconran-VirtualBox bash[6528]:
/home/dconran/python/dg/venv/bin/gunicorn: line 4: import: command not found
Feb 14 12:40:11 dconran-VirtualBox bash[6529]:
/home/dconran/python/dg/venv/bin/gunicorn: line 5: from: command not found
Feb 14 12:40:11 dconran-VirtualBox bash[6526]:
/home/dconran/python/dg/venv/bin/gunicorn: line 7: syntax error near unexpected token `('
Feb 14 12:40:11 dconran-VirtualBox bash[6526]:
/home/dconran/python/dg/venv/bin/gunicorn: line 7: ` sys.argv[0] = re.sub(r'(-script\.>
Feb 14 12:40:11 dconran-VirtualBox systemd[1]: myproject.service: Main process exited,
code=exited, status=2/INVALIDARGUMENT
Feb 14 12:40:11 dconran-VirtualBox systemd[1]: myproject.service: Failed with result
'exit-code'.
myproject.service
包括:-
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=dconran
Group=www-data
WorkingDirectory=/home/dconran/python/dg
Environment="PATH=/home/dconran/python/dg/venv/bin"
ExecStart=/usr/bin/bash /home/dconran/python/dg/venv/bin/gunicorn --workers 3 --bind
unix:myproject.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
我已经确认 python3 和 gunicorn 都在 ...venv/bin 中,并且事实上,从命令行运行时 gunicorn 确实可以正常运行 - 那么为什么它不能通过 systemd 运行呢?
如有任何帮助/建议,我们将不胜感激。