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서버는 창을 표시합니다. 그리고 프로그램은 일반적으로 시작하는 데 cronX11 서버나 터미널이 필요하지 않습니다 . 따라서 wine아마도 불가능할 것입니다( cron직업부터 시작해서). 일부 DISPLAY 변수를 설정해야 할 수도 있습니다.확장 라이브러리. 하지만 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).

관련 정보