我正在关注这如何在 Ubuntu 18.04 上安装 Django 和 Postgres、Nginx 和 Gunicorn 指南。
我已经创建了以下文件 .socket
sudo nano /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
我已经创建了以下文件 .service
sudo nano /etc/systemd/system/gunicorn.service
原始 RECOMENDED_FORMATTING-s 在指导
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=sammyRECOMENDED_FORMATTING
Group=www-data
WorkingDirectory=/home/sammyRECOMENDED_FORMATTING/myprojectdirRECOMENDED_FORMATTING
ExecStart=/home/sammyRECOMENDED_FORMATTING/myprojectdirRECOMENDED_FORMATTING/myprojectenvRECOMENDED_FORMATTING/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
myprojectRECOMENDED_FORMATTING.wsgi:application
[Install]
WantedBy=multi-user.target
我如何格式化我自己的版本我的虚拟环境位于服务器上的项目文件夹之外
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=SERVER_USER
Group=www-data
WorkingDirectory=/home/SERVER_USER/MAIN_PROJECT_FOLDER
ExecStart=/home/SERVER_USER/ven/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/home/SERVER_USER/MAIN_PROJECT_FOLDER/MAINAPPLICATION_FOLDER.sock \
MAINAPPLICATION_FOLDER.wsgi:application
[Install]
WantedBy=multi-user.target
我也尝试过按照最初的建议保留这些
--bind unix:/run/gunicorn.sock \
然后我尝试执行以下代码
sudo systemctl start gunicorn
错误消息 1
Failed to start gunicorn.service: Unit gunicorn.service not found.
我也尝试过 2
sudo systemctl start gunicorn.socket
错误消息 2
Failed to start gunicorn.socket: Unit gunicorn.socket is not loaded properly: Invalid argument.
See system logs and 'systemctl status gunicorn.socket' for details.
为了解决这个问题,我尝试过
- https://stackoverflow.com/questions/40711747/failed-to-start-gunicorn-service-unit-gunicorn-service-not-found这指向我正在做的完全相同的指南,只是使用了旧版本的 Linux。
- 这不是相同的代码,没有答案单元 gunicorn.service 加载失败:没有此文件或目录
- 运行:
systemctl status gunicorn.socket
结果:Warning: The unit file, source configuration file or drop-ins of gunicorn.socket changed on disk ● gunicorn.socket - gunicorn daemon Loaded: error (Reason: Invalid argument) Active: inactive (dead)
- 运行:
systemctl is-enabled gunicorn.socket
结果:enabled
- 运行:
systemctl is-enabled gunicorn.service
结果:Failed to get unit file state for gunicorn.service: No such file or directory
答案1
您的服务中有 [Install] 部分,这意味着您需要运行命令sudo systemctl enable gunicorn.service
在系统启动时启动该服务。
一旦运行该命令,就会在目录中创建指向该文件的符号链接/etc/systemd/system/multi-user.target.wants/
。
请注意,您还需要创建名为的套接字文件gunicorn.socket
并启用它。启用后,您可以通过运行命令来激活套接字sudo systemctl start gunicorn.socket
。您不需要运行该服务,因为 systemd 会找出依赖关系。
您可以使用 检查服务状态systemctl status gunicorn.service
。
答案2
就我而言,服务器没有创建该gunicorn.socket
文件。所以,我必须自己创建该文件并启用它。
转到:/etc/systemd/system
并通过命令检查所有可用的文件和目录ls
。
如果该文件不存在,请尝试通过以下方式从第一个文件重新创建:sudo nano ~/etc/systemd/system/gunicorn.socket
, 或sudo nano gunicorn.socket
。
然后先通过以下方式启用它:sudo systemctl enable gunicorn.socket
,启用后执行:sudo systemctl start gunicorn.socket
。
如果一切正常,您将看到文件的状态gunicorn.socket
为活动状态,运行命令后sudo systemctl status gunicorn.socket
您将看到:
gunicorn.socket - gunicorn socket
Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor prese>
Active: active (listening) since Fri 2020-06-26 17:53:10 UTC; 14s ago
Triggers: ● gunicorn.service
Listen: /run/gunicorn.sock (Stream)
Tasks: 0 (limit: 1137)
Memory: 0B
CGroup: /system.slice/gunicorn.socket