Shell-Script

如何在每次重新啟動時啟動 cpp bin?

  • September 23, 2021

我是 LINUX 作業系統的初學者,我的問題是下一個:

我有一個使用 OpenCV 和另一個庫的 C++ 原始碼編譯的 bin,它在螢幕上顯示從 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

我找到了解決方案。這是服務文件的配置:

[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

這部分是錯誤的

#!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 腳本根本不處理任何命令行參數。

引用自:https://unix.stackexchange.com/questions/670065