El script no funciona en crontab

El script no funciona en crontab

Tengo un script para iniciar mi servidor de Minecraft cada reinicio. Puedo ver en los registros que está llamando al cmd, pero no se abre ninguna pantalla. Si trabajo, ejecuto el script manualmente, /home/minecraft/scripts/startMinecraft.shfunciona perfectamente.

Aquí está mi crontab:

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

Es un servidor centos 6.

Aquí está mi startMinecraft.shguión.

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

Como dije antes, si ejecuto esa línea exacta manualmente, funciona perfectamente.

Respuesta1

Lo más probable es que necesite establecer la ruta completa para los archivos binarios, screenya que cuando se ejecuta el trabajo cron, no tendrá los valores $PATH configurados de la misma manera que usted, como usuario, los tiene configurados cuando inicia sesión a través de Terminal o SSH.Esta respuesta en Stack OverflowEs una explicación decente de todo el asunto.

Entonces te recomendaría que cambies tu script de este:

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

A esto:

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

Y reemplácelo /path/to/screencon la ruta completa real que puede obtener fácilmente usandowhichcomo esto:

which screen

La salida sería algo como:

/usr/bin/screen

O bien, puede configurar $PATH colocándolo en su script de esta manera:

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

Por supuesto, eso debería coincidir con el valor de RUTA real en su sistema, que puede obtener escribiendo lo siguiente:

echo $PATH

Pero personalmente prefiero el método fullpath ya que es más limpio para mí y los valores $PATH cambian a menudo, por lo que no querrás tener una mezcla de valores en tus scripts Bash.

PD: Además, es una pequeña cosa, pero su script Bash debe tener el valor real del intérprete de Bash establecido en el archivo"el asunto"en la parte superior así para que tu script se vea así:

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

Por supuesto, eso /bin/bashdebería coincidir con la ruta Bash real de su sistema al ejecutarse, which bashpero dudo que no esté en la /bin/bashruta en una instalación moderna.

información relacionada