Flask应用创建系统服务时如何解决(code=exited,status=203/Exec)

How to resolve (code=exited,status=203/Exec) while creating a system service for Flask app

我正在尝试使用系统服务使用 uWSGInginx 部署一个烧瓶应用程序。我看了很多教程,除了 .service 文件中的更改外,所有教程都有相同的过程。

这是我的服务文件:

[Unit]
Description=Flask web server

[Install]
WantedBy=multi-user.target

[Service]
User=schirag
PermissionsStartOnly=true
ExecStart=/home/schirag/server.py
TimeoutSec=600
Restart=on-failure
RuntimeDirectoryMode=755

我得到服务文件的状态如下:

flask.service - Flask web server
   Loaded: loaded (/etc/systemd/system/flask.service; disabled; vendor preset: disable>
   Active: failed (Result: exit-code) since Wed 2021-08-11 11:20:25 IST; 6s ago
  Process: 13131 ExecStart=/home/schirag/server.py (code=exited, status=203/EXEC)
 Main PID: 13131 (code=exited, status=203/EXEC)
Aug 11 11:20:24 localhost.localdomain systemd[1]: flask.service: Main process exited, code=exited, status=203/EXEC
Aug 11 11:20:24 localhost.localdomain systemd[1]: flask.service: Failed with result 'exit-code'.
Aug 11 11:20:25 localhost.localdomain systemd[1]: flask.service: Service RestartSec=100ms expired, scheduling restart.
Aug 11 11:20:25 localhost.localdomain systemd[1]: flask.service: Scheduled restart job, restart counter is at 5.
Aug 11 11:20:25 localhost.localdomain systemd[1]: Stopped Flask web server.
Aug 11 11:20:25 localhost.localdomain systemd[1]: flask.service: Start request repeated too quickly.
Aug 11 11:20:25 localhost.localdomain systemd[1]: flask.service: Failed with result 'exit-code'.
Aug 11 11:20:25 localhost.localdomain systemd[1]: Failed to start Flask web server.

我试过从其他来源更改服务文件,也尝试过更改目录权限,仍然出现同样的错误,无法使用该服务启动应用程序。虽然我可以 运行 使用 uwsgi 使用以下命令手动应用程序 - uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi

您的 ExecStart 需要更新。您必须提供文件的位置和解释器。由于您使用的是 python,您的代码应该是这样的:

[Unit]
Description=Flask web server

[Service]
User=schirag
PermissionsStartOnly=true
ExecStart=/usr/bin/python3 /home/schirag/server.py
TimeoutSec=600
Restart=on-failure
RuntimeDirectoryMode=755

[Install]
WantedBy=multi-user.target

使用命令 type python3 获取 python 的位置。