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
을 수행합니다 .cp
prodmain
.xinitrc