¿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


¿Eres usuario de esta máquina o tienes acceso a scripts de inicio?
— Corey S.


@ 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)

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

¿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"

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.