crontab에서 스크립트가 작동하지 않습니다.


2

재부팅 할 때마다 내 minecraft 서버를 시작하는 스크립트가 있습니다. 로그에서 cmd를 호출하는 것을 볼 수는 있지만 화면이 열려 있지 않습니다. 수동으로 스크립트를 실행하면 /home/minecraft/scripts/startMinecraft.sh 그것은 완벽하게 작동합니다.

여기에 내 crontab :

@reboot /home/minecraft/scripts/startMinecraft.sh
38 00,06,12,16 * * * /home/minecraft/scripts/backup.sh

그것은 centos 6 서버입니다.

여기 내거야. startMinecraft.sh 스크립트.

screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

이전에 말한 것처럼 수동으로 정확한 라인을 실행하면 완벽하게 작동합니다.

답변:


1

기회는 바이너리와 같은 전체 경로를 설정해야합니다. screen cron 작업이 실행될 때 터미널이나 SSH를 통해 로그인 할 때 사용자가 설정 한 것과 동일한 방식으로 $ PATH 값을 설정하지 않기 때문입니다. 스택 오버플로에 대한 답변 전체 거래에 대한 예의 바른 설명입니다.

그래서 나는이 스크립트를 다음과 같이 바꿀 것을 권한다.

screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

이에:

/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

그리고 /path/to/screen 당신이 쉽게 얻을 수있는 실제 전체 경로 which 이렇게 :

which screen

출력은 다음과 같습니다.

/usr/bin/screen

또는 실제로 $ PATH를 다음과 같이 스크립트에 배치하여 설정할 수 있습니다.

PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

물론 다음과 같이 입력하여 얻을 수있는 실제 PATH 값과 일치해야합니다.

echo $PATH

하지만 나는 개인적으로 나에게 더 깨끗하고 $ PATH 값이 자주 변경되므로 fullpath 메소드를 선호하므로 Bash 스크립트에 값의 소원을 갖기를 원하지 않는다.

추신 : 또한, 작은 일이지만 귀하의 Bash 스크립트는 실제 배쉬 인터프리터 값을 가지고 있어야합니다. "오두막" 위와 같이 스크립트가 다음과 같이 보일 것입니다.

#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

물론 그 /bin/bash 실행에 의한 시스템의 실제 Bash 경로와 일치해야합니다. which bash 하지만 나는 그것이 /bin/bash 현대 설치 경로입니다.


startMinecraft 스크립트를 다음으로 변경했습니다. #!/bin/bash /usr/bin/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh 그리고 불행히도 변화가 없습니다. 도움을 주셔서 감사합니다.
Austin

@ 오스틴 당신은 100 % 모든 경로가 똑같은가? 실행하여 명령 줄에서 수동으로 스크립트를 실행할 수 있습니까? ./startMinecraft.sh - 문제가없고 문제는 cron 작업을 통해 실행 중일 때만 나타납니다.
JakeGould

네, 저는 which 명령을 사용하여 경로를 찾으십시오. 스크립트를 수동으로 실행하기 만하면 완벽하게 작동합니다.
Austin

1
@ JakeGould가 자신의 조언을 통해 올바른 영역에 있다고 확신합니다. 어쩌면 환경의 다른 측면이 있습니다. minecraft 자체 필요 (다른 변수들, $PATH 항목, 기타 서비스 등). 스크립트 사용을 시도하는 대신 로그인시 실행되는 시작 응용 프로그램에 스크립트를 넣을 수 있습니다. crontab 와 더불어 @reboot GUI 응용 프로그램에는 권장하지 않습니다. 그 앞에 와야 할 수도 있습니다. bash -c.
AFH

1
@JakeGould minecraft 서버는 데몬 화되지 않습니다. 이 멋진 콘솔을 실행합니다. screen 유용합니다.
Karen B
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.