재부팅할 때마다 cpp bin을 시작하는 방법은 무엇입니까?

재부팅할 때마다 cpp bin을 시작하는 방법은 무엇입니까?

저는 LINUX 운영 체제의 초보자이며 다음 질문은 다음과 같습니다.

OpenCV와 USB 카메라에서 제공하는 이미지를 화면에 표시하는 다른 라이브러리를 사용하는 C++ 소스 코드에서 컴파일된 저장소가 있습니다. 내 코드는 제대로 작동합니다. 다음 단계는 내 보드의 전원을 켤 때마다 이 bin 파일을 실행하는 것입니다. 나는 몇 가지 조사를 한 결과 systemctl을 사용하여 활성화할 수 있는 자체 서비스를 만드는 것이 나를 도울 수 있는 신뢰할 수 있는 방법이라는 것을 발견했습니다. 시도했지만 성공하지 못했지만 서비스 파일이 올바르게 구성되었는지 확실하지 않습니다. 또한 시작 앱을 사용해 보았지만 다시 실패했습니다. 추신: 내 마더보드: Nvidia Jetson Tx2, 내 OS: 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'

내 쉘 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

관련 정보