¿Cómo uso crontab para iniciar una sesión de pantalla?

12

Quiero crear una entrada crontab para que inicie la pantalla, inicie un servidor de juegos y se desconecte. Esto es por si el servidor se reinicia y quiero que inicie esto automáticamente.

0 0 0 0 0 (comando)

debe ejecutarse al inicio.

Ejecuta un archivo de shell ubicado en ~ / cube / server.sh

Víctor
fuente
¿Eres usuario de esta máquina o tienes acceso a scripts de inicio?
Corey S.
2
Por favor, consulte Gestión de procesos .
Pausado hasta nuevo aviso.
@ Dennis: Sí, me gusta eso. Pero no podemos asumir que el servidor de juegos que está ejecutando no tiene algún tipo de consola a la que deba acceder (es decir, siempre se ejecuta en primer plano). De lo contrario, ¿por qué se molestaría con la pantalla? A menos que, por supuesto, no esté al tanto de nada y antecedentes.
Corey S.
Soy un usuario en esta máquina.
Victor

Respuestas:

15

Algo como esto debería funcionar. Este ejemplo genera una pantalla y se ejecuta "arriba":

screen -d -m top

En su crontab, como se indicó, querría hacer algo como esto:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

Por supuesto, si el servidor del juego requiere un conjunto de entornos "normales", puede acercarse:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)
Corey S.
fuente
1
¿Qué hace la . ~/.profileparte?
Victor
Establece a la fuerza el entorno para la entrada cron. Sin ella, solo obtienes un par de entradas muy específicas. (Ver man crontab para más detalles)
Corey S.
Tengo un archivo .sh que ejecuta el servidor del juego, ¿funcionaría esto? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Víctor
Esa es probablemente la mejor manera de hacerlo. Si eso funciona, probablemente no necesite preocuparse por el perfil, pero si necesita un $ PATH completo, etc., siempre puede obtener el archivo .profile del script server.sh.
Corey S.
5

Esto debería ser suficiente ... ejecutar

$ crontab -e

Luego ingrese:

@reboot screen -dmS Victor
atx
fuente
¿Puede intentar explicar cómo se relaciona este comando 'Victor' con la ejecución de un script, por ejemplo, el script sobre el que preguntó el OP?
Patrick
1
-S es solo para el nombre de la sesión
atx
4

Solo por el bien de la integridad, también es posible usar tmux para el propósito en lugar de screen(ver este enlace para una comparación):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"
Petr Pudlák
fuente
0

Tuve una situación similar, pero debido a otras restricciones irrazonables, no pude usar crontab. De hecho, tuve la pantalla de llamada inittab. (reemplazó algunos nombres por información oscura):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

En 'file.screenrc' es donde configuro algunas opciones:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

De esta manera, comenzó en el arranque, y si el programa se apagaba o la pantalla se cerraba, volvería a aparecer. Puede que no se haya considerado convencional, pero tuve que trabajar en torno a algunos requisitos ambientales extraños. Sin embargo, si necesitáramos eliminarlo, tendríamos que comentar esa línea y finalizar la sesión. Luego, cuando esté listo para recuperarlo, descomente e inicie q.

mangloide
fuente