crontab을 사용하여 와인을 실행할 수 없습니까?

crontab을 사용하여 와인을 실행할 수 없습니까?

내 크론탭:

* * * * * ~/d2gs.sh

내 응용 프로그램:

#!/bin/sh

#
# D2GS
#

# Go to the directory
cd ~

# Run the applications
if ! ps aux | pgrep "D2GS"; then
    wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
fi

crontab이 프로세스를 시작하지 않습니다. ~/d2gs.sh를 수동으로 성공적으로 실행할 수 있기 때문에 이상합니다.

답변1

"crontab이 프로세스를 시작하지 않습니다"와 "프로세스가 시작되지만 예상대로 수행되지 않습니다"를 구별해야 합니다. 그리고 파일이 실행 가능한지 확인하십시오.

내가 가정했던 것과 달리 ~in을 사용하는 crontab것은 문제가 되지 않습니다. 전체 명령 문자열이 쉘로 전달됩니다.

답변2

작동 cd ~하지 않을 수도 있습니다(이후물결표 확장보편적이지 않습니다). 그것을 선호하십시오 cd $HOME(...의 모든 구현에 대해 동일한 작업이 보장됩니다 /bin/sh) ..... POSIX sh(또는 /bin/sh)는 일반적으로 기억하십시오~ 아니다 bash(그리고 /bin/shPOSIX와 완전히 호환되지는 않지만 "bourne"과 유사할 수도 있습니다)!

물론 pwd > /dev/stderr디버깅 목적으로 스크립트에 다음과 같은 것을 추가할 수도 있습니다.

wine일반적으로X11창을 표시하는 서버입니다. 그리고 일반적으로 X11 서버나 터미널에서 시작된 프로그램은 cron없습니다. 그래서 wine아마도 (당신의 직업에서) 시작하지 못하는 것입니다 cron. 일부 DISPLAY 변수를 설정해야 할 수도 있습니다 .Xlib. 하지만 Xvfb를 사용할 수도 있습니다.여기.

마침내,pgrep(1)스캔 프로세스입니다. 혼자 사용하거나 ps aux | grep "D2GS"사용법을 배우십시오 pgrep .

나는 echo something > /dev/stderr또는 더 나은 것을 echo사용 하는 것이 좋습니다프린트프(1)(적절한리디렉션) 또는로거(1)적어도 디버깅 목적으로(여러 곳에서) 스크립트에서.

그리고 적어도 디버깅 단계에서는 wine-s stderr 및 stdout을 로 리디렉션하지 않을 것입니다 . /dev/null코딩을 할 수 없나요(적어도일시적으로디버깅하는 동안) 다음과 같은 호출기로 wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1살펴보십시오 ./tmp/wine.outless

귀하 cron(및 귀하의 쉘 스크립트)가 대화식을 사용하지 않습니다.PATH변하기 쉬운. 설정하는 것을 고려해야 합니다.명시적으로스크립트(또는 crontab)에서. 보다환경(7).

관련 정보