2

У меня есть скрипт для запуска моего сервера майнкрафт при каждой перезагрузке. Я вижу в журналах, что он вызывает 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 ответ1

1

Скорее всего, вам нужно установить полный путь для двоичных файлов, например screen так как при запуске задания cron значения $ PATH не будут установлены так же, как значения, заданные вами, как пользователем, при входе через терминал или SSH. Этот ответ о переполнении стека является достойным объяснением всей сделки.

Поэтому я бы порекомендовал вам изменить свой скрипт из этого:

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 в современной установке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .