30분마다 sh 스크립트를 실행하도록 사용자 "pi"를 사용하여 crontab을 구성했습니다.
터미널에 crontab -u pi -e
다음 줄을 추가했습니다: */30 * * * * /bin/sh /home/pi/test.sh
test.sh 스크립트에는 세 줄이 있습니다.
#!/bin/sh
/usr/bin/transmission-gtk
echo "done" > /home/pi/startup/result.txt
결과적으로 result.txt는 30분마다 업데이트되며, Transmission-gtk는 전혀 나타나지 않습니다. 즉, test.sh의 명령 중 1개만 유효합니다.
하지만 터미널에서 /home/pi/test.sh를 수동으로 실행하면 모든 것이 잘 작동합니다. test.txt가 업데이트되고 Transmission-gtk가 표시됩니다.
나는 crontab의 모든 것이 절대 경로로 작성되어야 한다는 것을 알고 있으며 Transmission-gtk가 /usr/bin에 있다고 확신합니다. 물론, 위에서 우리는 사용자 "pi"가 test.sh 및 Transmission-gtk를 실행할 수 있는 권한을 가지고 있음을 알고 있습니다.
왜 이런 일이 일어나는지 말해 줄 수 있는 사람이 있나요?
답변1
분명히 Transmission-gtk가 당신이 시작하고 싶은 그래픽 프로그램인가요? 이 경우 시작할 모니터를 cron에 알려주어야 합니다. crontab의 행 앞에 이것을 시도해 보십시오(디스플레이 0을 사용한다고 가정):
export DISPLAY=:0
또한 메일(아마도 /var/mail/username)에 오류 메시지가 있어야 합니다. 이를 통해 문제에 대해 더 자세히 알 수 있습니다.