我对在 Ubuntu 中编写脚本还很陌生。我有一个使用 OpenCV 进行 Ipcamera 视频处理的 C++ 应用程序,我正在 Ubuntu 14.04 中工作。
我将尝试解释我所做的事情:
首先,我想检查是否可以在启动时调用脚本,因此我创建了这个简单的脚本,它仅在我拥有脚本的同一目录中创建一个文件:
#!/bin/sh
RUTA_ENTORNO=`dirname $0`
echo "Creando archivo de prueba..."
touch ${RUTA_ENTORNO}/ArchivoPrueba.txt
exit 0
我在 rc.local 中添加下一行:
sh /home/myScript
当我重新启动计算机时,文件就创建好了,非常完美。
然后我编译了我的应用程序,并将可执行文件移动到我的脚本的同一文件夹中,并添加以下内容:
#!/bin/sh
/home/executable
RUTA_ENTORNO=`dirname $0`
echo "Creando archivo de prueba..."
touch ${RUTA_ENTORNO}/ArchivoPrueba.txt
exit 0
我/home/executable
在脚本中添加了一行来执行它,并检查此后是否创建了 file.txt。
但我不明白的是,当我重新启动系统时,相机没有运行。似乎应用程序没有抛出任何错误,但创建了 file.txt。但是,如果我在终端中运行sh /home/myScript
,应用程序会启动,我可以看到相机,但不会创建 file.txt。
当我重新启动系统时,如何自动运行我的应用程序?
答案1
我对此做一点猜测:
/home/executable
可能取决于正在初始化的图形,我认为这意味着在 GUI 运行之后。- 如果 GUI 没有运行,它可能会因错误而退出,并且您的脚本将继续执行剩余部分(这就是未创建文件的原因)。输出将
rc.local
被丢弃,因此您不知道它是否引发了错误。 - 如果 GUI 正在运行,您的程序将继续运行,因此脚本在您关闭它之前不会到达剩余部分。
考虑使用Upstart 会话作业. 在(例如) 中创建一个.conf
文件,其中包含:~/.config/upstart
camera.conf
description "My OpenCV-based camera app"
start on startup
stop on session-end
exec /home/executable
现在它应该在您登录时自动启动。您可以使用以下命令来启动和停止您的应用程序(camera
是您创建的文件的名称.conf
):
start camera
stop camera
respawn
如果您希望 Upstart 在关闭该程序时再次启动该程序,您还可以将其添加到配置文件中。