Crear una sesión de pantalla con un script bash usando contab

8

Quiero que se ejecute un archivo .jar cada vez que se inicia el servidor (estamos usando un VPS), así que edité crontab usando crontab -ey luego agregando @reboot bash /home/bash/startserver.sh. Pero ni siquiera he llegado al punto en que el guión funcione en absoluto.

Aquí está mi guión:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

La razón que necesito usar screenes porque cuando inicio bukkit.jar, entra en una consola donde puedo ingresar más comandos para ese programa (aunque estoy seguro de que todos están familiarizados con Minecraft y sus servidores en este sitio, , jaja), pero necesito poder hacer otros comandos como root y para otros programas mientras se está ejecutando, e incluso cerrar mi sesión PuTTY.

El único problema es que cuando se ejecuta este script, crea una sesión de pantalla, pero su ID no aparece en la lista screen -ls, ya que la ID está en blanco. Más bien, tengo que ir a /run/screen/S-rootbuscar la identificación y luego usar la típica screen -X -S $name quiten ella.

Tal vez esto ni siquiera sea posible, o tal vez haya una forma más simple de hacerlo (me encantaría más simple), pero no puedo entender por qué esto no está funcionando. Y si esto es posible, ¿es posible volver a unirse a una sesión screen -S bukkitcuando se ejecuta un script bash? (Múltiples preguntas, supongo, ¡pero muchas gracias por tu ayuda! (Paréntesis))

Jacob Larson
fuente

Respuestas:

15

Pantalla de inicio en modo separado, y haga que ejecute su comando dentro de ella:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

Es posible que desee crear un script dedicado bukkit.sh:

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

De modo que si el script se vuelve más complejo, no tiene que escribir una línea larga screen, y el screencomando puede permanecer igual, simplemente:

screen -d -m -S bukkit path/to/bukkit.sh
janos
fuente
1
Intenté hacer ambas opciones, la que tiene un archivo más largo y luego la que tiene dos archivos separados, pero ahora la sesión de pantalla no se está creando en absoluto. He intentado ejecutar los comandos directamente desde la línea de comandos, pero tampoco funcionó ...: /
Jacob Larson
¿Recibe un mensaje de error o algo? Primero haga que el bukkit.shscript funcione en la línea de comando. Luego, verifique que screen -S bukkit path/to/bukkit.shfuncione. Luego, verifique que screen -d -m -S bukkit path/to/bukkit.shfuncione. Finalmente, configura cron. Intente lo más simple primero y tome pequeños pasos para comprender qué pasos se rompen. Dime eso y el mensaje de error que obtienes si necesitas ayuda.
janos
1

Debería hacer update-rc.dlo siguiente para activar el servicio al iniciar:

# update-rc.d cron defaults
Maythux
fuente
@JacobLarson De nada ... Es mejor marcar como respuesta y votar si esto te ayuda
Maythux