У меня есть скрипт для запуска моего сервера minecraft при каждой перезагрузке. Я вижу в логах, что он вызывает cmd, но экран не открывается. Если я запускаю скрипт вручную, /home/minecraft/scripts/startMinecraft.sh
он работает отлично.
Вот мой кронтаб:
@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 значения $PATH будут установлены не так, как они установлены у вас как пользователя при входе в систему через терминал или SSH.Этот ответ на Stack Overflow— это достойное объяснение всей этой истории.
Поэтому я бы рекомендовал вам изменить свой сценарий с этого:
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 часто меняются, поэтому вам не захочется иметь в своих скриптах 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
пути в современной установке.