Script não funciona no crontab

Script não funciona no crontab

Eu tenho um script para iniciar meu servidor Minecraft a cada reinicialização. Posso ver nos logs que ele está chamando o cmd, mas nenhuma tela está sendo aberta. Se eu trabalhar, execute o script manualmente, /home/minecraft/scripts/startMinecraft.shele funciona perfeitamente.

Aqui está meu crontab:

@reboot /home/minecraft/scripts/startMinecraft.sh
38 00,06,12,16 * * * /home/minecraft/scripts/backup.sh

É um servidor centos 6.

Aqui está meu startMinecraft.shroteiro.

screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

Como eu disse antes, se eu executar essa linha exata manualmente, ela funciona perfeitamente.

Responder1

Provavelmente, você precisa definir o caminho completo para os binários, pois screenquando o cron job é executado, ele não terá os valores $PATH definidos da mesma forma que você, como usuário, os definiu ao fazer login via Terminal ou SSH.Esta resposta no Stack Overflowé uma explicação decente de todo o negócio.

Então, eu recomendo que você altere seu script a partir deste:

screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

Para isso:

/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

E substitua /path/to/screenpelo caminho completo real que você pode obter facilmente usandowhichassim:

which screen

A saída seria algo como:

/usr/bin/screen

Ou você pode definir o $PATH colocando-o em seu script assim:

PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

É claro que isso deve corresponder ao valor PATH real em seu sistema, que você pode obter digitando o seguinte:

echo $PATH

Mas eu pessoalmente prefiro o método fullpath, pois é mais limpo para mim e os valores $PATH mudam frequentemente, então você não deseja ter uma mistura de valores em seus scripts Bash.

PS: Além disso, uma coisa pequena, mas seu script Bash deve ter o valor real do interpretador Bash definido no“Shebang”na parte superior assim para que seu script fique mais ou menos assim:

#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

É claro que isso /bin/bashdeve corresponder ao caminho Bash real do seu sistema em execução, which bashmas duvido que não esteja no /bin/bashcaminho em uma instalação moderna.

informação relacionada