ARM版ubuntu18.04实现程序延时随机启动

摘要:
1.因为QT程序在ARM版本ubuntu18.04操作系统中运行,所以当操作系统启动时,它会自动启动。相关说明如下:sudolafpad~/。profile添加以下内容:exportQTDIR=/usr/local/Rolltech/Qt-4.8.7 exportPATH=$QTDIR/bin:$PATHexportMANPATH=$QDIR/man:$MANPATHexportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRRARY_PATHvncserver&cd/home/teamhd/mypro_biaozun。/Mypro&然而,在实际运行后,发现系统的网络连接是否就绪会影响程序的正常运行。下面介绍如何实现程序的随机延迟启动。具体步骤如下:首先,编写脚本文件运行。sh在延迟后启动程序:sleep10scd/home/teamhd/mypro_Biaozhen/mypro然后,修改。配置文件并调用跑步记录。后台执行模式下的sh脚本:exportQTDIR=/usr/local/Rolltech/Qt-4.8.7 exportPATH=$QTDIR/bin:$PATHexportMANPATH=$QTDIR/man:$MANPATHexportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRRARY_PATHvncserver&/home/teamhd/run。Sh&上述方案已经成功测试,解决了初始随机启动程序界面异常的问题,而不会带来其他新问题。

1,缘起

某个QT程序运行在ARM版ubuntu18.04操作系统中,随操作系统启动而自动启动。

具体方法是,在登录用户的.profile文件增加对程序的调用。相关指令如下:

sudo leafpad ~/.profile
添加以下内容:
export QTDIR=/usr/local/Trolltech/Qt-4.8.7
export PATH=$QTDIR/bin:$PATH
export MANPATH=$QTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

vncserver &
cd  /home/teamhd/mypro_biaozhun
./mypro &

但实际运行后发现,系统的网络连接是否准备好,对程序的正常运行有影响。具体表现是,在同时满足以下条件时,

l  计算机设置网络地址为静态IP

l  在断网时,冷启动或热启动系统

随系统启动而自动启动的程序会出现如下界面,界面刷新方面有异常,如左上角的灰块。

ARM版ubuntu18.04实现程序延时随机启动第1张

猜测原因是断网启动时,静态IP联网处理需要较多的处理时间,在网络尚未准备好的情况下,程序启动时出现异常。

既然开机时网络准备需要较长的时间,那么将程序在以前的基础上延迟一段时间再运行,等网络准备好了再启动查询机程序。

以下讲述如何实现程序随机延时启动。

2,延时方案1

首先想到的是采用 /etc/rc.local来实现开机启动,替换.~/profile方式,但实验结果表明,前者运行的时间比后者还早,达不到延时执行的效果。

再想到crontab,但是crontab必须指定时间,无法与开机事件关联,也无法使用。

最后看到网上提到sleep可以延时,于是修改.profile文件,在执行程序前加了一句sleep 10s。

sleep 10s
cd  /home/teamhd/mypro_biaozhun
./mypro

结果发现,断网启动后,启动时间变长,屏幕变形,程序界面异常,似乎扩大为正常的2倍宽度,vnc弹出一个警告框,提示xstartup有错误。

如果把延时时间改为3s,界面宽度能恢复正常,但对于解决灰块问题没有帮助。

显然,本方案失败,没能解决原来的问题,还带来新的问题。那么原因在哪里呢?

3,延时方案2

分析认为,因为sleep语句是阻塞式执行,.profile中的延时可能打乱了操作系统的某些执行流程,某些涉及用户登录的初始化操作不能等待太久的时间,否则出错。

因此可以改进一下,将涉及程序运行的部分放到后台进程中延时执行,不要阻塞.profile的执行。具体步骤如下:

首先,编写脚本文件 run.sh,负责延时后启动程序:

sleep 10s
cd  /home/teamhd/mypro_biaozhun
./mypro

然后,修改.profile,采用后台执行方式调用 run.sh脚本:

export QTDIR=/usr/local/Trolltech/Qt-4.8.7
export PATH=$QTDIR/bin:$PATH
export MANPATH=$QTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

vncserver &
/home/teamhd/run.sh &

上述方案实测成功,解决了最初的随机启动程序界面异常问题,同时不带来其它新的问题。

4,总结

Linux系统的程序开机运行是一个老话题,但是总会出现新问题。不同的Linux版本、不同的硬件架构,解决方案都不相同,不能张冠李戴。

笔者也曾经尝试过采用/etc/rc.local方案来实现开机启动,但该方案带来的不确定性比.profile更多,原因有2点,1是rc.local执行时间更早,2是执行时没有确定用户。

在研究sleep方案时,笔者也差点放弃,一开始将 sleep 2s写成了 sleep 2000,结果没产生任何效果;后来又在 .profile中尝试 在 sleep语句后加 “&”,结果当然是没有延时作用。

直到突然想到将程序的延时执行作为一个整体与 .profile的执行相分离,才最终解决了问题。

一句话,太阳底下无新鲜事,多尝试研究,问题都有解决方案。

免责声明:文章转载自《ARM版ubuntu18.04实现程序延时随机启动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇父类子类指针相互转换问题Windows定时重新启动(适用于server 2012 r2)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

C# 如何提取SaveFileDialog的保存路径

直接使用代码1publicTestOne()2{3InitializeComponent();4SaveFileDialog();//调用打开SaveFileDialog保存对话框5}67#区域保存对话框8privateevoidSaveFileDialog()9{10//startlocalFilePath,fileNameExt,newFileName,...

使用事务和SqlBulkCopy批量插入数据

类似与MicrosoftSQLServer包中名为bcp的命令行应用程序。但是使用SqlBulkCopy类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQLServer表加载大量数据。SqlBulkCopy可以应用到大批量数据的转移上,而不管数据源是什么。之前在做winform开发的时候,发现当datagridview...

sqlserver 计算 百分比

selectltrim+'%'As百分比NUMERIC(P,S)P的默认值是:38S的默认值是:-84~127numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。...

PowerQuery清理非文件名字符(清除指定列表中的所有字符)

在左侧导航窗格的空白区域右击,依次找到空白查询项接下来的思路是:遍历列表SearchList中的所有项,依次清理Data表中所有想要处理的列。第三个参数是一个函数:它告诉List.Accumulate函数,在每一次使用SearchList中某一项操作Data表时,其操作的方式是如何的。...

SpringBoot入门 (三) 日志配置

上一篇博客文章记录了在spring-boot项目中读取的属性文件中配置的属性。本文将学习如何登录springboot项目。SpringBoot在内部使用CommonsLogging进行日志记录,但它也为其他日志记录框架提供默认配置,如JavautilLogging、Log4j2和Logback。在每种情况下,日志记录器都预先配置为使用控制台输出和可选文件输出...

zabbix监控华为交换机

xmlversion=“1.0”encoding=“UTF-8”?...