我使用烧瓶创建了一个API,我正试图通过创建一个systemd服务将其部署到linux服务器上。
我已经使用direnv设置输入参数到应用程序,如数据库连接。下面是文件的样子:

uwsgi配置如下:

systemd文件有以下条目:

每当我试图访问浏览器上的服务时,我都会在我的uwsgi日志中得到折叠错误:
-没有找到python应用程序,请检查启动日志中是否有错误- pid: 23791\x{req:-1/3 192.168.9.180 () {44 vars ( 719字节)}清华10月11日14:35:09 :2018年GET / =>在0 msecs (HTTP/1.1 500)中生成了21个字节(HTTP/1.1 500),2个标头为83个字节(1个在核心0上切换)
我的理解是,systemd文件中的ExecStart命令无法调用direnv变量,因此我添加了ExecStartPre条目,但似乎不起作用。
如有任何提示或想法,将不胜感激。
注意:当我通过命令行从python虚拟环境运行uwsgi时,应用程序是可以访问的,没有错误:
uwsgi --套接字0.0.0.0:5000 -协议=http -w app:app
发布于 2018-10-20 06:49:27
我有一些建议可能对你有帮助,也许只有第一个是你需要的.
1)要么将所有在direnv中定义的env变量作为Environment移动到systemd单元,要么将它们移动到一个特殊文件中(类似于您已经拥有的文件),而不使用“源激活”行和导出,然后将该文件作为EnvironmentFile传递,这是该https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Environment的文档。
2)你的ExecStartPre实际上什么也不做,即使你做"cd“进入这条路,这是丢失的,也不是持久的。你应该把它移走。
3)通过将你的路径设置为这条路,你限制了你的自我,我会建议你看看你当前路径的价值,然后将它设置为这个值。但至少要添加"/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin".现在,扰流警报,您可能不需要设置它。
4)将套接字放在/run//socket.socket目录中,让systemd使用RuntimeDirectory指令管理您的RuntimeDirectory。
祝好运!
https://stackoverflow.com/questions/52751950
复制相似问题