Provavelmente, você precisa definir o caminho completo para os binários, screen
pois, quando o trabalho cron for executado, ele não terá os valores $ PATH definidos da mesma maneira que os de um usuário, quando você fizer login através do 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 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 o which
seguinte:
which screen
A saída seria algo como:
/usr/bin/screen
Ou você pode definir o $ PATH colocando-o no seu script assim:
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Obviamente, isso deve corresponder ao seu valor PATH real no 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 geralmente mudam para que você não deseje uma mistura de valores nos 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 se pareça com o seguinte:
#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
Obviamente, isso /bin/bash
deve corresponder ao caminho real do Bash do sistema executando, which bash
mas duvido que não esteja no /bin/bash
caminho de uma instalação moderna.
#!/bin/bash /usr/bin/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
e, infelizmente, nenhuma alteração. Obrigado pela ajuda../startMinecraft.sh
- sem problemas e o problema só aparece ao executá-lo por meio de um trabalho cron?which
comando para descobrir o caminho e executei manualmente o script e funcionou perfeitamente.minecraft
ele próprio precise (outras variáveis,$PATH
entradas, outros serviços, etc.). Você pode colocar o script nos aplicativos de inicialização executados no logon, em vez de tentar usarcrontab
com a@reboot
linha, o que eu não recomendaria para aplicativos da GUI. Você pode precisar precedê-lobash -c
.screen
é útil tê-lo disponível .