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/log
obtengo
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
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 -X
medios screen
espera que se ejecuten comandos de pantalla y no un script.
Por lo tanto, debe utilizar el screen
stuff
comando según estepregunta SU
screen -S sessionname -X stuff 'command'`echo -ne '\015'`
Actualizar
Pruebe /bin/bash
o donde se encuentre el Shell que utiliza.
3 0 * * * /bin/bash /home/root/spaceengineers/start.sh
Tal vez agregue contenido start.sh
para ayudar a depurar.
Puedes encontrar Shell con el which
comando. Quizás tengas que sudo
ser 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 -d
argumento, pero m
probablemente también ayude de alguna manera/casos.
A continuación se muestra el fragmento relevante del screen --help
resultado.
-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