Iniciando script en pantalla con cron

Iniciando script en pantalla con cron

Pido disculpas si me han preguntado esto antes, pero no estoy seguro de cómo realizar una consulta de búsqueda para esto. Soy extremadamente nuevo en Linux y he ido aprendiendo sobre la marcha para resolver problemas.

Estoy intentando configurar trabajos cron que funcionen para reiniciar un servidor de juegos que estoy ejecutando.

Actualmente mi crontab se ve así

#backup world as instructed by https://github.com/g1franc/SEDS-Setup
0 0 * * * /home/root/spaceengineers/start.sh backupworld
#close server
1 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^C"
#close screen
2 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^M"
#recreate server
3 0 * * * /home/root/spaceengineers/start.sh

Ahora en el mundo de respaldo obtengo mi archivo syslog ubicado en /var/logobtengo

May 24 00:00:01 SpaceEngineers CRON[1958]: (root) CMD (/home/root/spaceengineers/start.sh backupworld)
May 24 00:00:01 SpaceEngineers CRON[1957]: (CRON) info (No MTA installed, discarding output)

y eso también es lo mismo con el servidor de recreación.

May 24 00:03:01 SpaceEngineers CRON[2269]: (root) CMD (/home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers)
May 24 00:03:01 SpaceEngineers CRON[2268]: (CRON) info (No MTA installed, discarding output)

Los otros comandos funcionan perfectamente bien.

ahora, antes de que alguien se pregunte por qué he estructurado mi código de la manera que lo he hecho, es porque el tutorial que estaba siguiendo dice que inicie el servidor ~/spaceengineers/start.sh -x spaceengineers y, según lo que he leído, necesito hacer /usr/bin/screen para acceder a cualquier comando de pantalla en cron

¿Qué estoy haciendo mal y qué debo hacer para rectificar mis problemas?

EDITADO:Cambié el crontab para que coincida con el contenido actual en mi servidor, los problemas siguen siendo los mismos

Pastebin de start.sh

http://pastebin.com/9QcWyqYF

Respuesta1

¿Puedes comprobar la sintaxis de la pantalla GNU para esta línea?

3 0 * * * /home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers

Esperaba algo como:

3 0 * * * /usr/bin/screen -S spaceengineers -X stuff 'command with newline' 

Sin embargo, el uso de los -Xmedios screenespera que se ejecuten comandos de pantalla y no un script.

Por lo tanto, debe utilizar el screen stuffcomando según estepregunta SU

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

Actualizar

Pruebe /bin/basho donde se encuentre el Shell que utiliza.

 3 0 * * * /bin/bash /home/root/spaceengineers/start.sh

Tal vez agregue contenido start.shpara ayudar a depurar.

Puedes encontrar Shell con el whichcomando. Quizás tengas que sudoser root para descubrirlo.

Respuesta2

Este comando funcionó para mí, aunque debido a que uno o más de los comandos en mi script requerían sudo, tuve que configurarlo en el cron del usuario root:

17 2 29 1 * /usr/bin/screen -dmS $MYSESSIONNAME /bin/bash $FULLPATHTOMYSHELLSCRIPT $SHELLSCRIPTARG1 $SHELLSCRIPTARG2 ...

La clave para que la pantalla funcione (y no solo se cierre inmediatamente cuando cron la invoca) es el -dargumento, pero mprobablemente también ayude de alguna manera/casos.

A continuación se muestra el fragmento relevante del screen --helpresultado.

-dmS name Iniciar como demonio: sesión de pantalla en modo independiente."

Respuesta3

@daily /usr/bin/screen -dms paisaje acuático /ig.py && python ig.py

información relacionada