저는 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