【问题标题】:Flask with uWSGI: Can't set as system service on Ubuntu带有 uWSGI 的烧瓶:无法在 Ubuntu 上设置为系统服务
【发布时间】:2021-09-11 02:11:20
【问题描述】:

可能和很多人一样,我正在尝试按照 Digitalocean 上的教程来设置 Flask 应用程序、uWSGI 实例,并最终使用 nGinx 提供服务。我正在尝试在运行 Ubuntu 20.04.3 LTS 的 Azure 环境中的 VM 上进行设置。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

我被困在第 5 步。我无法弄清楚为什么由于 203 权限错误,我无法成功地将我的 uWSGI 实例作为系统服务启动。我能够让 uWSGI 实例和 Flask 应用程序在虚拟环境中协同工作,并在 http://127.0.0.1:5000/ 访问测试页面。

我首先尝试构建服务并指向我在 /home/user 文件夹中的 ini 文件。我随后读到如果将二进制文件放在 /home/ 文件夹中,SELinux 可能会阻止它,所以我将此操作的所有内容移动到我的 /usr/local/bin 文件夹中,但我仍然无法启动该服务。我已经对相关文件夹中的所有文件进行了 chmod,以便我的用户拥有完整的 777 权限。

我的服务文件 (radioland.service):

[Unit]

Description=uWSGI instance to serve myproject

After=network.target



[Service]

User=azureuser

Group=www-data

WorkingDirectory=/usr/local/bin/radioland/radioland/

Environment="PATH=/usr/local/bin/radioland/radioland/bin"

ExecStart=/usr/local/bin/radioland/radioland --ini radioland.ini



[Install]

WantedBy=multi-user.target

我的 radioland.ini 文件:

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

die-on-term = true

logto = /usr/local/bin/radioland/radioland/myproject.log

权限(我只是在“azureuser”用户名下运行):

total 52
drwxr-xr-x 7 azureuser azureuser  4096 Sep 10 23:28 .
drwxrwxrwx 7 azureuser www-data   4096 Sep  9 20:00 ..
-rw-r--r-- 1 azureuser azureuser 12288 Sep  9 19:18 .radioland.ini.swp
drwxrwxr-x 2 azureuser azureuser  4096 Sep  8 16:24 __pycache__
drwxrwxr-x 3 azureuser azureuser  4096 Sep  8 06:35 flaskr
drwxrwxr-x 2 azureuser azureuser  4096 Sep  8 06:35 instance
drwxrwxr-x 6 azureuser azureuser  4096 Sep 10 06:47 myprojectenv
-rw-rw-r-- 1 azureuser azureuser   546 Sep  8 16:24 myscript.py
-rwxr-xr-x 1 azureuser azureuser   191 Sep 10 23:20 radioland.ini
drwxrwxr-x 6 azureuser azureuser  4096 Sep  8 06:35 venv
-rw-rw-r-- 1 azureuser azureuser    79 Sep  8 16:04 wsgi.py

最后,我总是收到错误(包括将用户名更改为 root 时):

radioland.service - uWSGI instance to serve myproject
     Loaded: loaded (/etc/systemd/system/radioland.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2021-09-10 23:40:17 UTC; 2h 30min ago
    Process: 127087 ExecStart=/usr/local/bin/radioland/radioland --ini radioland.ini (code=exited, status=203/EXEC)
   Main PID: 127087 (code=exited, status=203/EXEC)

Sep 10 23:40:17 RadioLandVM systemd[1]: Started uWSGI instance to serve myproject.
Sep 10 23:40:17 RadioLandVM systemd[127087]: radioland.service: Failed to execute command: Permission denied
Sep 10 23:40:17 RadioLandVM systemd[127087]: radioland.service: Failed at step EXEC spawning /usr/local/bin/radioland/radioland: Permission denied
Sep 10 23:40:17 RadioLandVM systemd[1]: radioland.service: Main process exited, code=exited, status=203/EXEC
Sep 10 23:40:17 RadioLandVM systemd[1]: radioland.service: Failed with result 'exit-code'.

我完全迷路了。我无法指出服务器上会阻止服务启动的任何其他内容。

【问题讨论】:

  • 途中所有文件夹的权限如何? /usr , /usr/local , /usr/local/bin ..?

标签: ubuntu flask uwsgi


【解决方案1】:

根据您的日志,我认为文件/usr/local/bin/radioland/radioland 没有可执行标志。这也会在 Linux 上导致 Permission Denied

你可以尝试:

sudo chmod +x /usr/local/bin/radioland/radioland

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2016-03-20
    • 2019-07-29
    • 2018-02-02
    相关资源
    最近更新 更多