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