Iniciar un servidor Minecraft automáticamente: servicio systemd y tarea cron

Publicado el Actualizado el 6 min de lectura

Tras un reinicio del servidor, tu servidor de Minecraft debería volver a funcionar por sí solo. Te mostramos la unidad de servicio systemd como camino limpio y la tarea cron con @reboot como alternativa.

¿Quieres que tu servidor de Minecraft vuelva a estar en línea por sí solo tras un reinicio del servidor root, sin que tengas que conectarte por SSH? Entonces estás en el lugar adecuado.

Te mostramos dos caminos: la unidad de servicio systemd como solución limpia y recomendada, y la clásica tarea cron con @reboot como alternativa rápida. Ambas variantes funcionan en todas las distribuciones de Linux habituales, es decir, en Debian, Ubuntu, AlmaLinux y Rocky Linux.

systemd o tarea cron: ¿cuál es el camino adecuado?

Una tarea cron con @reboot se configura rápido, pero solo conoce un único momento: el arranque del sistema. Si ahí sale algo mal, o si el servidor se cae más tarde, no ocurre nada más.

Una unidad de servicio systemd es el camino limpio y aporta varias ventajas:

  • El servidor arranca solo cuando la red está realmente lista, en lugar de hacerlo tras un tiempo de espera estimado.
  • Tras una caída, systemd reinicia el servidor automáticamente.
  • Manejas el servidor con los comandos habituales systemctl start, stop, restart y status.
  • Los mensajes de error acaban en el journal y se pueden rastrear con journalctl.

Por eso recomendamos la vía de systemd. La tarea cron la describimos más abajo como alternativa para los casos en los que systemd no está disponible.

Preparación: anota el comando de inicio, el usuario y el directorio

Antes de empezar necesitas tres datos de tu instalación actual:

  • El comando de inicio de tu archivo "start.sh", por ejemplo screen -dmS spigot java -Xmx4G -jar spigot.jar
  • El usuario con el que se ejecuta el servidor, en el ejemplo "spigot"
  • El directorio en el que se encuentra el archivo del servidor, en el ejemplo /home/spigot/server

El contenido típico de un start.sh tiene este aspecto:

#¡Esto es solo un ejemplo! Usa el contenido de tu propio start.sh.

screen -S spigot java -Xmx2G -jar spigot.jar

Importante: para el arranque automático, screen -S tiene que convertirse obligatoriamente en screen -dmS. El motivo: screen -S abre una sesión interactiva y espera un terminal. Durante el arranque del sistema no hay ningún terminal, así que el inicio fallaría. screen -dmS, en cambio, arranca la sesión directamente en segundo plano.

Si todavía no has instalado ningún servidor de Minecraft, primero te ayudará nuestra guía Instalar un servidor de Minecraft en Debian.

Crear una unidad de servicio systemd para el servidor de Minecraft

Crear el archivo de la unidad

Como root, crea un nuevo archivo de servicio:

nano /etc/systemd/system/minecraft.service

Introduce el siguiente contenido y adapta el usuario, el directorio, la memoria RAM y el nombre del archivo a tu instalación:

[Unit]
Description=Minecraft-Server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=spigot
WorkingDirectory=/home/spigot/server
ExecStart=/usr/bin/screen -dmS spigot java -Xmx4G -jar spigot.jar
ExecStop=/usr/bin/screen -S spigot -X stuff "stop\n"
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target

Las líneas más importantes de un vistazo:

  • After y Wants se encargan de que el servidor solo arranque cuando la red está disponible.
  • User define con qué usuario se ejecuta el servidor. No lo hagas funcionar nunca como root.
  • WorkingDirectory es el directorio con el archivo del servidor. Sin este dato, Java no encuentra el archivo JAR.
  • ExecStop envía el comando "stop" a la sesión de screen. Así el servidor guarda el mundo correctamente en lugar de ser terminado de golpe.
  • Restart=on-failure reinicia el servidor automáticamente tras una caída, RestartSec define el tiempo de espera en segundos.

Guarda el archivo con "CTRL + X", luego "Y" y "Enter".

Activar e iniciar el servicio

Después, systemd lee el nuevo archivo, activa el arranque automático e inicia el servidor de inmediato:

systemctl daemon-reload
systemctl enable --now minecraft

El estado actual lo compruebas con:

systemctl status minecraft

Si la salida muestra "active", el servicio está en marcha. Si hay problemas, el journal entrega el mensaje de error exacto:

journalctl -u minecraft -n 50

Acceder a la consola del servidor

El servidor sigue ejecutándose dentro de una sesión de screen. Como esa sesión pertenece al usuario "spigot", cambia primero a ese usuario y abre después la consola:

su spigot
screen -r spigot

Con "CTRL + A + D" vuelves a salir de la consola sin detener el servidor.

Detener y reiniciar el servidor

A partir de ahora controlas el servidor a través de systemd:

systemctl stop minecraft
systemctl restart minecraft

Si quieres desactivar de nuevo el arranque automático, basta con:

systemctl disable minecraft

Alternativa: arranque automático mediante una tarea cron con @reboot

Si prefieres no crear una unidad de servicio, también puedes conseguir el arranque automático a través de la crontab del usuario correspondiente. Abre la crontab con:

export VISUAL=nano; crontab -e

Añade tu comando de inicio como última línea, con el prefijo @reboot:

@reboot <contenido de tu archivo start.sh>

#Este es el aspecto aproximado que debería tener el parámetro de inicio, puede diferir de tu propio script de arranque.

@reboot screen -dmS <nombre-del-screen> java -Xmx<AMOUNT>G -jar <directorio y nombre del archivo del servidor de Minecraft>.jar


#EJEMPLO:
@reboot screen -dmS spigot java -Xmx2G -jar /home/spigot/spigot.jar

Aquí también debes asegurarte de usar screen -dmS y no screen -S. Cómo arrancar del mismo modo cualquier otra aplicación o script al iniciar el servidor lo explica nuestra guía Ejecutar programas automáticamente al iniciar el servidor.

Probar el arranque automático

No te fíes de que la configuración sea correcta, pruébala una vez a propósito. Reinicia el servidor:

reboot

Espera uno o dos minutos, vuelve a conectarte por SSH y comprueba con systemctl status minecraft o con screen -ls si el servidor de Minecraft está funcionando de nuevo. Conéctate además con el cliente del juego para asegurarte de que el servidor es realmente accesible.

Errores frecuentes con el arranque automático

  • screen -S en lugar de screen -dmS: con diferencia, el error más habitual. Sin -dm el servidor no arranca durante el inicio.
  • Directorio incorrecto: Java no encuentra el archivo JAR. Comprueba WorkingDirectory o indica en la tarea cron la ruta completa al archivo JAR.
  • Usuario incorrecto: si el servicio se ejecuta como root, los archivos del mundo recién creados pertenecen después a root, y el usuario real del servidor ya no puede escribir en ellos.
  • Memoria RAM insuficiente: si el valor detrás de -Xmx es mayor que la RAM libre, el kernel termina el proceso de Java poco después del arranque.

Preguntas frecuentes

systemd o tarea cron: ¿cuál es la mejor opción?
Una unidad de servicio systemd es la solución más limpia. Solo inicia el servidor cuando la red está lista, lo reinicia automáticamente tras una caída y se maneja con systemctl start, stop y status. Una tarea cron con @reboot no ofrece ninguna de estas funciones.
¿Por qué hay que cambiar screen -S por screen -dmS?
screen -S abre una sesión interactiva y espera un terminal. Durante el arranque del sistema no hay ningún terminal, por eso el inicio falla. screen -dmS arranca la sesión en segundo plano y es, por tanto, la variante correcta para el arranque automático.
¿Cómo accedo a la consola del servidor tras un inicio automático?
Inicia sesión primero como el usuario con el que se ejecuta el servicio y abre después la sesión con screen -r. Una sesión de screen pertenece siempre solo al usuario que la ha iniciado.
¿systemd reinicia mi servidor también después de una caída?
Sí, siempre que establezcas Restart=on-failure en el archivo de la unidad. systemd vuelve a iniciar el servidor entonces tras el tiempo de espera indicado en RestartSec.
¿Cómo compruebo que el arranque automático funciona de verdad?
Reinicia el servidor a propósito una vez con reboot y controla después con systemctl status minecraft si el servicio está en marcha. Si hay errores, journalctl -u minecraft muestra el mensaje exacto.

Servidor Minecraft Arranque automático systemd Tareas cron Crontab Linux Servidores de juegos Debian