Estoy tratando de ejecutar un servidor de Minecraft en mi servidor unRAID.
El servidor se ejecutará en el shell y luego se sentará allí esperando la entrada. Para detenerlo, necesito escribir 'stop' y presionar enter, y luego salvará el mundo y saldrá con gracia, y estoy de vuelta en el caparazón. Todo eso funciona si lo ejecuto a través de telnet en la caja NAS, pero quiero ejecutarlo directamente en la caja.
esto es lo que tenía anteriormente como primer intento:
#define USER_SCRIPT_LABEL Start Minecraft server
#define USER_SCRIPT_DESCR Start minecraft server. needs sde2 mounted first
cd /mnt/disk/sde2/MCunraid
screen -d -m -S minecraft /usr/lib/java/bin/java -Xincgc -Xmx1024M -jar CraftBukkit.jar
MCunraid es la carpeta donde tengo Craftbukkit.jar y todos los archivos del mundo, etc. Si escribo esa línea de pantalla directamente, la pantalla se desconecta y se inicia el servidor. Si ejecuto esa línea desde el script, no parece configurar una pantalla
para detener el servidor, necesito 'escribir' STOP y luego presionar enter. Mi enfoque fue
screen -S minecraft -X stuff "stop $(echo -ne 'r')"
para enviar a la pantalla 'minecraft' el texto s-t-o-p y un retorno de carro. Pero eso no funciona, incluso si lo escribo directamente en la línea de comando. Pero si 'screen -r' puedo llegar a la pantalla con el servidor en ejecución, luego escriba 'stop' y se apagará correctamente.
El servidor funciona bien si hago telnet y lo hago manualmente, solo necesito ejecutarlo sin estar conectado desde mi computadora remota.
Respuesta aceptada:
Puedo resolver al menos parte del problema:por qué stop
parte no funciona. Experimentalmente, cuando inicia una sesión de Pantalla en modo separado (screen -d -m
), no se selecciona ninguna ventana, por lo que la entrada se envía más tarde con screen -X stuff
simplemente se pierde. Debe especificar explícitamente que desea enviar las pulsaciones de teclas a la ventana 0 (-p 0
). Esta es una buena idea de todos modos, en caso de que cree otras ventanas en esa sesión de pantalla por cualquier motivo.
screen -S minecraft -p 0 -X stuff "stop^M"
(Traducción de pantalla ^M
a control-M que es el caracter enviado por Enter clave.)
El problema de iniciar la sesión desde un script probablemente esté relacionado con unMENU.
Relacionado:¿Cómo evitar que aparezca la pantalla de bienvenida/pantalla de bloqueo después de estar inactivo en Windows 8?