如何在每次重新启动时启动 cpp bin?

如何在每次重新启动时启动 cpp bin?

我是 LINUX 操作系统的初学者,我的问题是下一个:

我有一个从 C++ 源代码编译的 bin,它使用 OpenCV 和另一个库,它在屏幕上显示 USB 摄像头提供的图像。我的代码工作正常,下一步是每次我的主板开机时执行这个 bin 文件。我做了一些研究,发现可以帮助我的可靠方法是创建我自己的可以使用 systemctl 启用的服务。我尝试过,但没有成功,但我不确定我的服务文件是否已正确配置。另外,我尝试使用启动应用程序,再次失败。 PS:我的主板:Nvidia Jetson Tx2,我的操作系统:Ubuntu 18.04 LTS。

我正在等待任何建议,并感谢您的回复。谢谢!

编辑:我的服务文件配置:

[Unit]
Description=Script that will execute my bin
[Service]
ExecStart=/home/nvidia/Desktop/daemonScripts/daemonVDM.sh start
[Install]
WantedBy=multi-user.target

daemonVDM.sh

#!usr/bin/bash
path_vdm_bin="/home/nvidia/Desktop/running"
cd $path_vdm_bin
./vdm --camera-sources 1

输出systemctl status myscript

myscript.service: Main process exited, code=exited, status=203/EXEC
myscript.service: Failed with result 'exit-code'

我的 shell daemonVDM.sh 工作正常

我执行了以下命令:

sudo chmod 777 myscript.service
systemctl start myscript
systemctl enable myscript

答案1

这部分是错误的

#!usr/bin/bash

请尝试

#! /bin/bash

实际上让我们进一步简化它:

#! /bin/bash
cd /home/nvidia/Desktop/running && ./vdm --camera-sources 1

现在,vdm仅当脚本能够进入目标目录时,应用程序才会运行,否则将退出。

[Service]
ExecStart=/home/nvidia/Desktop/daemonScripts/daemonVDM.sh start

start虽然没有什么坏处,但没有必要。您只需将其删除即可。您的 bash 脚本根本不处理任何命令行参数。

答案2

我找到了解决方案。这是服务文件的配置:

[Unit]
Description=Script that will execute my bin

[Service]

ExecStart=/home/nvidia/Desktop/daemonScripts/daemonVDM.sh
Environment="DISPLAY=:1"
Environment="XAUTHORITY=/run/user/1000/gdm/Xauthority"
RestartSec=30
Restart=always
[Install]
WantedBy=multi-user.target

相关内容