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