我有以下 systemd 服务来运行我的 flask 应用程序:
[Unit]
Description=My Flask server
After=network.target
[Service]
User=ubuntu
ExecStart=/home/ubuntu/my-server/script.py
WorkingDirectory=/home/ubuntu/my-server/
Restart=on-failure
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
然而,当我跑步时
systemctl start my-server.service
我得到以下状态
my-server.service - My Flask server
Loaded: loaded (/etc/systemd/system/my-server.service; enabled; vendor preset: enabled)
Active: active (exited) (Result: exit-code) since Wed 2017-06-21 22:24:18 UTC; 8min ago
Main PID: 8407
(code=exited, status=203/EXEC)
如何防止 Flask 服务器退出?当我直接使用以下命令运行脚本时
/home/ubuntu/my-server/script.py
它运行正常。但如果我用 systemd 运行它,服务器就会立即退出。
答案1
不确定这是否有帮助,但是这是我用来控制个人项目的 flask 应用程序的服务文件。我认为默认情况下,systemd 将使用没有个性化设置的 /bin/sh shell 运行脚本。您可能需要尝试切换到 /bin/sh shell 并运行命令。可能缺少环境变量。
来自链接的单元文件:
[Unit]
Description=Persistent Transactions API
After=syslog.target network.target electrum.service
[Service]
User=percy
Group=percy
ExecStart=/bin/bash -c "source /opt/persist_transaction/bin/activate ; /opt/persist_transaction/api.py -c /opt/persist_transaction/config.ini"
Restart=always
[Install]
WantedBy=multi-user.target
答案2
修复了我自己的问题。我必须更改文件所有者以匹配 systemd 脚本,然后使其可执行:
chown ubuntu /home/ubuntu/my-server/script.py
chmod +x /home/ubuntu/my-server/script.py