我在使用 Systemd 运行 Gunicorn Web 服务时遇到问题。
以下是我为了执行而创建的文件:
shell脚本文件(/home/ubuntu/mata.sh):
#!/usr/bin/env bash
cd /home/ubuntu/workspace/test-api
/home/ubuntu/workspace/mata_venv/bin/gunicorn --workers=4 app:app --bind 0.0.0.0:xxxx
这是我的 .service 文件(/lib/systemd/system/mata.service):
[Unit]
Description=Test API Service
After=multi-user.target
[email protected]
[Service]
User=ubuntu
Type=simple
ExecStart=/home/ubuntu/mata.sh
StandardInput=tty-force
[Install]
WantedBy=multi-user.target
单独运行 shell 脚本效果很好,但是在运行时systemctl status mata.service
,我收到以下消息:
Started Test API Service
mata.service: Main process exited, code=exited, status=216/GROUP
mata.service: Unit entered failed state.
mata.service: Failed with result 'exit-code'.
任何想法?
答案1
您没有“Type=simple”服务,您有一个分叉服务,因为您关心的不是“mata.sh”进程,而是“gunicorn”进程。
对于 Type=simple 服务,将该[Service]
部分更改为:
[Service]
User=ubuntu
Type=simple
WorkingDirectory=/home/ubuntu/workspace/test-api
ExecStart=/home/ubuntu/workspace/mata_venv/bin/gunicorn --workers=4 app:app --bind 0.0.0.0:xxxx
StandardInput=tty-force
...我cd
用 a 导入命令工作目录指示。
或者将其设为分叉服务:
[Service]
User=ubuntu
Type=forking
ExecStart=/home/ubuntu/mata.sh
StandardInput=tty-force
如果看起来,gunicorn 进程启动子进程(workers=4),您可能更喜欢 Type=forking 解决方案。