Calor de verano — todo se derrite, hasta nuestros precios.−25%−25 % en cada plan anual, hasta el 31 de agostoVer planes
EQVPS
Empezar

Mantén un bot funcionando 24/7 en un VPS (para que nunca muera en silencio)

15 jun 2026 · 3 min de lectura · EQVPS Team

Hay dos formas en que un bot «no funciona» en un servidor. La obvia: se detiene en el segundo en que cierras SSH. La sigilosa: funciona bien dos días, se cae a las 4 de la madrugada por algún error no manejado, y te enteras horas después cuando alguien pregunta por qué está caído. Ambas tienen la misma solución, y no es «acuérdate de reiniciarlo» — es entregar el trabajo a systemd, que mantiene las cosas arriba para que tú no tengas que hacerlo.

Por qué muere cuando cierras sesión

Si lo lanzaste con python bot.py en tu sesión SSH, el proceso es un hijo de esa sesión. Cierra la sesión, el proceso se va con ella. nohup y & tapan esto, pero no te dan reinicio-en-fallo ni arranque-al-inicio — así que has resuelto el problema pequeño y conservado el grande.

La solución real: un servicio systemd

Esta es la cosa entera. Crea /etc/systemd/system/mybot.service:

[Unit]
Description=My bot
After=network-online.target

[Service]
WorkingDirectory=/home/youruser/mybot
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
Environment=API_KEY=...

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot

Dos líneas hacen el trabajo pesado:

Cuando aún se porta mal — lee los logs

Un bot que sigue en bucle de fallos no se arregla reiniciando más fuerte; algo está realmente mal. systemd captura stdout/stderr, así que:

systemctl status mybot          # arriba o abajo, último código de salida
journalctl -u mybot -n 100      # logs recientes + el error en el que murió
journalctl -u mybot -f          # seguir en vivo

La causa casi siempre está justo ahí: una variable de entorno faltante, una excepción no manejada, un timeout de API, un kill por OOM. Arregla esoRestart=always es una red de seguridad, no una cura para un bug real.

Consejo: si los logs muestran que el bot es matado por memoria, has superado la máquina — revisa la guía de dimensionamiento.

Cuándo tienen sentido tmux o pm2 en su lugar

systemd no es la única respuesta, solo el mejor valor por defecto:

Para un único bot siempre activo o agente, systemd es lo más simple que de verdad funciona — ya está en el servidor, no necesita tooling extra, y hace el reinicio, el arranque-al-inicio y el logging de fábrica.

El fondo honesto

La disponibilidad no va de un servidor más grande ni de más disciplina — va de no atar tu proceso a tu portátil. Envuélvelo en una unidad systemd con Restart=always y enable, y revisa journalctl cuando algo falle. Haz eso una vez y tu bot sigue arriba estés observando o durmiendo. (¿Máquina nueva? Ciérrala primero — un bot 24/7 es también un objetivo 24/7.)


¿Necesitas dónde ejecutarlo? Un plan Nano (3 $/mes) mantiene un bot vivo 24/7 — systemd hace el resto.

Preguntas frecuentes

¿Por qué se detiene mi bot cuando cierro SSH?

Porque lo iniciaste dentro de tu sesión SSH, así que está atado a esa sesión y muere cuando te desconectas. La solución es ejecutarlo como un servicio en segundo plano independiente de tu inicio de sesión — systemd es la forma limpia, tmux es la forma rápida.

¿Cómo auto-reinicio un bot cuando se cae?

Ejecútalo como un servicio systemd con Restart=always y un pequeño retardo RestartSec. systemd entonces relanza el proceso en segundos tras cualquier fallo, indefinidamente, sin niñera. Esa única línea es la diferencia entre «murió a las 4» y «parpadeó y se recuperó».

¿Cómo hago que un bot arranque automáticamente tras un reinicio?

systemctl enable tu servicio. «enable» lo cablea para arrancar al inicio, «start» lo ejecuta ahora — haz ambos (systemctl enable --now). Tras cualquier reinicio, el bot vuelve por su cuenta sin que inicies sesión.

¿systemd, pm2 o tmux — cuál debería usar?

systemd para cualquier cosa real y de larga duración: maneja el reinicio, el arranque-al-inicio y el logging de forma nativa, sin tooling extra. tmux es genial para una prueba rápida o ver una ejecución interactiva. pm2 es razonable si vives en Node y quieres su dashboard, pero es otra cosa que mantener funcionando. Para un único bot siempre activo, systemd gana en simplicidad.

¿Cómo veo por qué mi bot se sigue cayendo?

journalctl -u yourbot -n 100 muestra los logs recientes y el error en el que murió; añade -f para seguir en vivo. Aquí suele esconderse la causa real — una variable de entorno faltante, una excepción no manejada, un timeout de API. Arregla eso, no solo reinicies a ciegas.

← Volver al blogVer planes y precios →

Comentarios

Aún no hay comentarios. Sé el primero.

Deja un comentario

Los comentarios se moderan antes de aparecer.