내 일정:
* * * * * ~/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/sh
POSIX와 정확히 호환되지 않을 수도 있지만 "bourne"에 더 가깝습니다)!
물론 pwd > /dev/stderr
(디버깅 목적으로) 스크립트에 이와 같은 것을 추가할 수 있습니다.
wine
일반적으로 하나가 필요합니다.X11서버는 창을 표시합니다. 그리고 프로그램은 일반적으로 시작하는 데 cron
X11 서버나 터미널이 필요하지 않습니다 . 따라서 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.out
less
귀하 cron
(및 귀하의 쉘 스크립트)는 대화식을 사용하지 않습니다.PATH
바꾸다. 설정하는 것을 고려해야 합니다.분명히스크립트(또는 crontab
)에서. 바라보다환경(7).