Script não está funcionando no crontab

3

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

Aqui está o meu crontab:

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

É um servidor centos 6.

Aqui está o meu script startMinecraft.sh .

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

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

    
por Austin 20.06.2016 / 23:55

1 resposta

1

É provável que você precise definir o caminho completo para binários como screen , pois quando a tarefa cron for executada, os valores de $ PATH não serão definidos da mesma maneira que um usuário quando você fizer login via Terminal ou SSH. Esta resposta no Stack Overflow é uma explicação decente de todo o negócio.

Por isso, recomendo que você altere seu script a partir disso:

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/screen pelo caminho completo real que você pode obter facilmente usando which assim :

which screen

A saída seria algo como:

/usr/bin/screen

Ou, você poderia 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 seu valor real de PATH em seu sistema, o 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 de $ PATH geralmente mudam, então você não quer ter um desejo de valores em seus scripts Bash.

PS: Além disso, uma pequena coisa, mas seu script Bash deve ter o valor real do interpretador Bash definido no “shebang " no topo dessa forma, para que seu script seja parecido com isto:

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

É claro que /bin/bash deve corresponder ao caminho Bash real de seus sistemas executando which bash , mas duvido que não esteja no caminho /bin/bash em uma instalação moderna.

    
por 21.06.2016 / 00:06

Tags