Estoy tratando de iniciar un servidor de Minecraft enviando algunos comandos a una instancia EC2 usando AWS-SDK para javascript.
ssm.sendCommand({ DocumentName: "AWS-RunShellScript", InstanceIds: ["ec2-instance-id"], TimeoutSeconds: 3600, Parameters: { commands: ['cd /home/ec2-user/minecraft/server', 'screen -S mc_server', 'java -Xmx3G -Xms3G -jar server-1-18.jar nogui'] }}, function(err, data) { if (err) { console.log("\nError:", err); } else { console.log("\nSuccess: ", data); } } ); El comando funciona correctamente y puedo conectarme al servidor después de esperar un poco. El detalle que me molesta es que el último comando ( java -Xmx3G -Xms3G -jar server-1-18.jar nogui ) nunca termina de ejecutarse porque registra continuamente los diferentes eventos del servidor hasta que el servidor se detiene manualmente. Sin embargo, cuando el servidor termina de cargarse, imprime en la salida estándar algo como:
¡Hecho! Terminado en xxx segundos.
Me gustaría rastrear el comando stdout y señalar al ejecutor de SSM que marque el comando como terminado, después de que se muestre esa línea. Necesito hacer esto, porque para detener el servidor correctamente, necesito volver a adjuntar la pantalla y luego enviar el comando /stop , pero debido a que el comando anterior aún se está ejecutando, devuelve un error.
Mi objetivo general es iniciar el servidor con un script y luego poder detenerlo correctamente. Sé que podría detener la instancia para detener el servidor, pero esto podría conducir a fragmentos corruptos en mi mundo. Tal vez hay una mejor manera de hacer esto. Cualquier ayuda es apreciada. ¡Gracias!