项目中用的Qt开发的GUI程序,需要随机自启动。
最初尝试过使用SuperVisor,但是会出现下面的错误。
qt.qpa.screen: QXcbConnection: Could not connect to display
Could not connect to any X display.
然后自己写了一个控制台的程序监视进程,使用SuperVisor进行管理,但是只能把控制台程序启动,控制台程序仍然无法启动GUI程序,原因未知。
最后的解决方案是使用startx命令,
在SuperVisor的command命令后面加上startx,如下:
command =startx /home/dq/QtProj/QMoveTest/Debug/QMoveTest
使用该命令的弊端是默认将GUI程序的界面侵占Ubuntu的桌面,可以通过Ctrl+Alt+F7切换回Ubuntu的桌面。
因为项目的目的就是GUI程序占满界面,该方法刚好满足要求,对于那些需要进入到Ubuntu桌面再显示GUI程序的需求不满足。
控制台守护进程代码:
链接: https://pan.baidu.com/s/1PytoXC9XP4ll11Z17oSHKg 密码: uxzi
补充一个坑:
部署之后程序连不到数据库,开始以为数据库所在的用户是root用户无法访问导致的。
实际上是当前路径的问题。
比如:
以此种方式启动程序,在程序获取到的当前路径是 /home/dq,并非/home/dq/QtProj/J1900Proj/J1900EntranceSystem-TH/Release
使用startx 也同样,这就导致程序在错误的路径下读取配置。
程序中修改获取路径的方式即可,不要取当前路径,在Linux获取当前路径应该都是对应到了PWD