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

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

재부팅할 때마다 마인크래프트 서버를 시작하는 스크립트가 있습니다. 로그에서 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

screencron 작업이 실행될 때 터미널이나 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

그러나 나는 개인적으로 fullpath 방법을 선호합니다. 왜냐하면 그것이 나에게 더 깨끗하고 $PATH 값이 자주 변경되어 Bash 스크립트에서 원하는 값을 갖고 싶지 않기 때문입니다.

PS: 또한 작은 일이지만 Bash 스크립트에는 실제 Bash 인터프리터 값이 설정되어 있어야 합니다."오두막"맨 위에 이렇게 하면 스크립트가 다음과 같이 보일 것입니다.

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

물론 이는 /bin/bash실행을 통해 시스템의 실제 Bash 경로와 일치해야 하지만 최신 설치 경로에 which bash없을지는 의문입니다 ./bin/bash

관련 정보