Скрипт не работает в crontab

Скрипт не работает в crontab

У меня есть скрипт для запуска моего сервера 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пути в современной установке.

Связанный контент