![crontab에서 sh 스크립트를 실행하는 중에 문제가 발생했습니다.](https://linux55.com/image/145152/crontab%EC%97%90%EC%84%9C%20sh%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EC%A4%91%EC%97%90%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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)에 오류 메시지가 있어야 합니다. 이를 통해 문제에 대해 더 자세히 알 수 있습니다.