我正在尝试在虚拟环境中的Ubuntu 16.04上运行作为服务运行的Flask + SocketIO应用程序。我的服务器每天凌晨3点重启(我无法控制),所以我需要它在启动时自动启动。
单独运行脚本可以正常工作:
$ python main.py
(29539) wsgi starting up on http://127.0.0.1:8081
我可以说它正在工作,因为它是服务页面(通过跟随this Stack Overflow answer设置的nginx服务器,虽然我不认为这是相关的。)
这是我的/etc/systemd/system/opendc.service
:
[Unit]
Description=OpenDC flask + socketio service
[Service]
Environment=PYTHON_HOME=/var/www/opendc.ewi.tudelft.nl/web-server/venv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH
ExecStart=/var/www/opendc.ewi.tudelft.nl/web-server main.py
Restart=always
[Install]
WantedBy=multi-user.target
所以当我尝试使用时:
$ sudo systemctl daemon-reload
$ sudo systemctl restart opendc
它不再提供页面了。状态显示:
$ sudo systemctl status opendc
* opendc.service - OpenDC flask + socketio service
Loaded: loaded (/etc/systemd/system/opendc.service; enabled; vendor preset: enabled)
Active: inactive (dead) (Result: exit-code) since Fri 2016-08-19 10:48:31 CEST; 15min ago
Process: 29533 ExecStart=/var/www/opendc.ewi.tudelft.nl/web-server main.py (code=exited, status=203/EXEC)
Main PID: 29533 (code=exited, status=203/EXEC)
Aug 19 10:48:31 opendc.ewi.tudelft.nl systemd[1]: opendc.service: Service hold-off time over, scheduling restart.
Aug 19 10:48:31 opendc.ewi.tudelft.nl systemd[1]: Stopped OpenDC flask + socketio service.
Aug 19 10:48:31 opendc.ewi.tudelft.nl systemd[1]: opendc.service: Start request repeated too quickly.
Aug 19 10:48:31 opendc.ewi.tudelft.nl systemd[1]: Failed to start OpenDC flask + socketio service.
我查了(code=exited, status=203/EXEC)
并对我发现的内容进行了一些故障排除:
我检查过main.py
是可执行的:
$ ls -l main.py
-rwxr-xr-x 1 leon leon 2007 Aug 19 10:46 main.py
main.py
第一行指向虚拟环境中的Python:
#!/var/www/opendc.ewi.tudelft.nl/web-server/venv/bin/python
那么这里的问题是什么?
答案 0 :(得分:0)
我认为你错误输入PYTHON_HOME而不是PATH = $ VIRTUAL_ENV / bin:$ PATH
你应该使用PATH = $ PYTHON_HOME / bin:$ PATH
答案 1 :(得分:0)
尝试并测试了使python文件作为服务在虚拟环境中运行的方法。
[Unit][Unit]
Description=Your own description
After=network.target
[Service]
Type=simple
Restart=always
WorkingDirectory=/home/path/to/WorkingDirectory/
VIRTUAL_ENV=/home/path/to/WorkingDirectory/venv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH
ExecStart=/home/path/to/WorkingDirectory/venv/bin/python app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
我把这个放在这里,这样我就可以随时回来