재부팅 시 쉘 스크립트를 올바르게 실행하는 방법

재부팅 시 쉘 스크립트를 올바르게 실행하는 방법

github에서 업데이트를 가져온 다음 검색된 코드를 실행하는 쉘 스크립트가 있습니다. /home/me/Desktop/refreshCode.sh에 있습니다.

-- refreshCode.sh --

#!/bin/bash

cd /home/me/src/ProductionMonitor
sudo /usr/bin git -C /home/me/src/ProductionMonitor pull
sudo cp /home/me/src/ProductionMonitor/* /home/me/Desktop/Production
cd /home/me/Desktop/Production
sudo /usr/bin/python3 prodmain.py >> logfile.data

쉘을 수동으로 시작하고 예상대로 실행될 수 있다는 것을 알고 있습니다. tkinter 창이 열리고 화면과 상호작용할 수 있습니다.

그러나 나는 아무것도 올바르게 시작할 수 없는 것 같습니다.

@reboot에 대한 crontab 설정을 시도했지만 성공하지 못했습니다. 사용자 인터페이스를 표시하지 않습니다.

Systemd 서비스를 설정했습니다.

-- prodmon.service --

[Unit]
Description=Service to run production monitor
After=multi-user.target

[Service]
Type=forking
ExecStart=/home/me/Desktop/refreshCode.sh
User=caleb
Group=caleb
WorkingDirectory=/home/me/Desktop/Production/
PIDFile=/var/run/prodmon.pid

[Install]
WantedBy=multi-user.target

시작한 후 서비스 상태를 확인하면 실행 중이라고 표시됩니다. 그러나 tkinter UI는 표시되지 않습니다.

답변1

모든 것을 sudo하면 안 됩니다. 모든 것이 자신의 디렉토리에 있습니다.

질문의 요점은 스크립트가 창을 표시할 위치를 모른다는 것입니다. 추가해 보세요

echo "DISPLAY=$DISPLAY" >> logfile.data

당신은 볼 수 있습니다

DISPLAY=

`logfile.data. 또한 다음을 사용하는 경우:

/usr/bin/python3 prodmain.py >> logfile.data 2>/tmp/errorfile

다음과 같은 내용이 표시될 수 있습니다 /tmp/errorfile.

prodmain: Xt error: Can't open display: 
prodmain: DISPLAY is not set

그래서 시작시 표시되지 않습니다.

이제 이 문제를 해결하는 방법은 무엇을 원하는지에 따라 많이 달라집니다. ~/.xinitrc그래픽 환경에 로그인했을 때부터 프로그램을 시작할 수 있습니다 . 작업을 두 부분으로 나눌 수 있습니다. 및 시작 시 작업을 수행 하고 git을 수행합니다 .cpprodmain.xinitrc

관련 정보