[{"data":1,"prerenderedAt":185},["ShallowReactive",2],{"seo-verification":3,"blog-autoalojar-healthchecks-monitorizar-cron-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-autoalojar-healthchecks-monitorizar-cron-vps-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":119,"ctaBody":120,"ctaButton":121,"ctaUrl":122,"relatedPosts":123},504,"autoalojar-healthchecks-monitorizar-cron-vps",{"fr":12,"en":13,"ar":14,"es":10},"self-host-healthchecks-vps","self-host-healthchecks-cron-monitoring-vps","استضافة-healthchecks-على-vps-مراقبة-مهام-cron","Healthchecks en un VPS: monitoriza tus tareas cron, autoalojado","Instala Healthchecks en un VPS: cada tarea cron, copia de seguridad o trabajo programado envía un ping, y recibes una alerta si falta, falla o tarda demasiado.",6,0,false,"2026-10-24T00:00:00+00:00","2026-10-24T23:28:56+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-healthchecks-vps-poster.svg",{"categorySlug":34,"appSlug":35},"monitorizacion-observabilidad","healthchecks","Una tarea cron que deja de ejecutarse no hace ruido. La copia nocturna falla, la limpieza de registros se detiene, la sincronización con un proveedor se rompe — y nada te avisa, porque nada se ejecuta. Healthchecks es una herramienta open source (licencia BSD-3) que invierte el problema: cada tarea envía un ping al terminar, y Healthchecks te avisa cuando ese ping no llega. Esta guía lo instala en un único contenedor Docker en un VPS, lo coloca detrás de un proxy inverso HTTPS y conecta una primera tarea cron.",[38,42,52,84,87,103,107,110,113,116],{"type":39,"title":40,"body":41},"h2","Por qué vigilar lo que debe ejecutarse, no solo lo que responde","Un monitor de disponibilidad comprueba que un servicio responde. No ve lo que ocurre entre dos peticiones: la copia de las 3 h, el envío de facturas, la renovación de un certificado, la exportación al contable. Estas tareas fallan en silencio — un disco lleno, una contraseña caducada, un servidor reiniciado sin su timer — y te das cuenta el día que las necesitas.\n\nLa variable `MAILTO` de cron apenas ayuda: solo envía un mensaje si la tarea se ejecuta y escribe en su salida, y no dice nada cuando la tarea ni siquiera arranca. Healthchecks parte de la ausencia: cada tarea tiene una planificación esperada, y el silencio más allá del margen de gracia dispara la alerta.",{"type":43,"title":44,"items":45},"ul","Lo que aporta Healthchecks",[46,47,48,49,50,51],"**Monitorización por ping** — cada tarea llama a una URL única; la ausencia de ping dispara la alerta.","**Planificación cron o por periodo** — expresión cron con zona horaria, o un intervalo simple, más un margen de gracia.","**Duración de la ejecución** — los pings `\u002Fstart` y `\u002Ffail` miden la duración y señalan los fallos explícitos.","**Códigos de salida y registros** — el código de salida y el final de la salida del comando, visibles en el panel.","**Más de veinte integraciones** — correo, webhook, Slack, Discord, Matrix, ntfy, Telegram, Gotify, PagerDuty, Opsgenie…","**Equipo y API** — proyectos separados, miembros invitados, insignias de estado y una API REST para crear comprobaciones desde tus scripts.",{"type":53,"title":54,"headers":55,"rows":59},"comparison","Healthchecks frente a los métodos habituales",[5,56,57,58],"Healthchecks","MAILTO de cron","Monitor de disponibilidad",[60,64,68,71,75,80],[61,62,63,63],"Alerta si la tarea no arranca","Sí","No",[65,66,67,63],"Alerta si la tarea falla","Sí, código de salida o \u002Ffail","Solo si escribe en su salida",[69,70,63,63],"Duración de la ejecución","Medida",[72,73,62,74],"Máquinas sin puerto abierto","Sí, una simple llamada HTTPS saliente","No, hay que alcanzar el destino",[76,77,78,79],"Canales de alerta","Más de veinte integraciones","Correo local","Según la herramienta",[81,82,63,83],"Historial centralizado","Sí, por comprobación","Sí, para los servicios",{"type":39,"title":85,"body":86},"Requisitos previos","Basta un VPS Ubuntu 24.04 con **1 GB de RAM**: Healthchecks funciona en un solo contenedor y guarda sus datos en una base SQLite. Necesitas Docker con el plugin Compose y un **nombre de dominio** que apunte al VPS, con nginx y un certificado HTTPS: las URL de ping y los enlaces de las alertas se construyen sobre esa dirección, y la aplicación rechaza las peticiones dirigidas a otro nombre.\n\nLo ideal es instalar Healthchecks en una máquina **distinta** de los servidores que vigila: si cae con ellos, nadie te avisará.",{"type":88,"title":89,"steps":90},"steps","Instalar Healthchecks con Docker Compose",[91,94,97,100],{"title":92,"body":93},"Preparar el archivo .env","Crea el directorio de la aplicación y un archivo `.env` con la clave secreta y la dirección pública. Sustituye `hc.example.com` por tu dominio.\n```bash\nmkdir -p \u002Fopt\u002Fhealthchecks && cd \u002Fopt\u002Fhealthchecks\ncat > .env \u003C\u003CEOF\nSECRET_KEY=$(openssl rand -hex 24)\nSITE_ROOT=https:\u002F\u002Fhc.example.com\nEOF\n```",{"title":95,"body":96},"Crear el archivo Compose","Coloca este `docker-compose.yml` en el mismo directorio. El puerto solo se publica en la interfaz de loopback, el registro público está cerrado y la base SQLite vive en un volumen.\n```yaml\nservices:\n  healthchecks:\n    image: healthchecks\u002Fhealthchecks:v5.0.1\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8102:8000\"\n    env_file: .env\n    environment:\n      DEBUG: \"False\"\n      DB_NAME: \u002Fdata\u002Fhc.sqlite\n      REGISTRATION_OPEN: \"False\"\n      GUNICORN_WORKERS: \"2\"\n    volumes:\n      - healthchecks-data:\u002Fdata\nvolumes:\n  healthchecks-data: {}\n```",{"title":98,"body":99},"Arrancar y crear la cuenta de administrador","Al arrancar, el contenedor aplica las migraciones y lanza el servidor web y los procesos de envío de alertas. Después crea tu cuenta: el comando pide una dirección de correo y una contraseña.\n```bash\ndocker compose up -d\ndocker compose exec healthchecks .\u002Fmanage.py createsuperuser\n```",{"title":101,"body":102},"Publicar en HTTPS detrás de nginx","Añade un bloque `server` para tu dominio, con un certificado de Let's Encrypt, y reenvía las cabeceras de origen: sin `X-Forwarded-Proto`, el inicio de sesión falla con un error CSRF.\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8102;\n    proxy_set_header Host $host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\n```",{"type":104,"title":105,"body":106},"tip","Mantén el registro cerrado","Por defecto, Healthchecks acepta registros públicos. `REGISTRATION_OPEN: \"False\"` los cierra: solo pueden entrar las cuentas que crees o invites a un proyecto. En un servidor expuesto a Internet, configúralo desde el primer arranque.",{"type":39,"title":108,"body":109},"Conectar tus tareas cron","En el panel, crea una comprobación, indica la planificación — la expresión cron de la tarea y su zona horaria — y un margen de gracia que cubra su duración normal. Copia la URL de ping y añádela a la tarea.\n```bash\n# crontab: copia a las 3 h, ping solo si tiene éxito\n0 3 * * * \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh && curl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull https:\u002F\u002Fhc.example.com\u002Fping\u002F\u003Cuuid>\n\n# variante: señalar el inicio y luego enviar el código de salida\nURL=https:\u002F\u002Fhc.example.com\u002Fping\u002F\u003Cuuid>\ncurl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull \"$URL\u002Fstart\"\n\u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh > \u002Ftmp\u002Fbackup.log 2>&1\ncurl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull --data-binary @\u002Ftmp\u002Fbackup.log \"$URL\u002F$?\"\n```\n\nLa primera forma solo envía el ping si hay éxito: un fallo se traduce en un ping ausente, y por tanto en una alerta al terminar el margen de gracia. La segunda es más expresiva: `\u002Fstart` mide la duración, el código de salida enviado en lugar del ping señala el fallo de inmediato y la salida enviada en el cuerpo de la petición aparece en el historial de la comprobación. Las opciones `-m 10 --retry 5` evitan que una red inestable bloquee la tarea o simule una caída.",{"type":39,"title":111,"body":112},"Recibir las alertas","En **Integrations**, añade al menos un canal que leas de verdad y asócialo a tus comprobaciones. Webhook, Slack (webhook entrante), Mattermost, ntfy y Gotify funcionan sin configuración en el servidor. Otras integraciones necesitan credenciales declaradas en `.env`: un token de bot para Telegram, una cuenta y un token para Matrix, una aplicación OAuth para Discord.\n\nLas alertas por **correo** pasan por un servidor SMTP: añade `EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD` y `DEFAULT_FROM_EMAIL` a `.env` y reinicia con `docker compose up -d`. Los mismos ajustes sirven para las invitaciones del equipo y los informes periódicos.",{"type":39,"title":114,"body":115},"Resolución de problemas","**La página devuelve un error 400.** La petición no llega con el nombre de host correcto: comprueba que `SITE_ROOT` coincide exactamente con el dominio servido por nginx y que el bloque `location` reenvía la cabecera `Host`.\n\n**El inicio de sesión falla con un error CSRF.** nginx no reenvía `X-Forwarded-Proto`: la aplicación cree recibir HTTP mientras el navegador habla HTTPS. Añade la cabecera y recarga nginx.\n\n**Una comprobación entra en alerta aunque la tarea se ejecutó.** El ping no salió: prueba el comando `curl` a mano desde la máquina afectada, verifica el acceso saliente en HTTPS y amplía el margen de gracia si la tarea dura más de lo previsto.\n\n**No llega ningún correo.** Sin `EMAIL_HOST`, Healthchecks no envía nada y lo indica en sus registros al arrancar: consulta `docker compose logs healthchecks`.",{"type":39,"title":117,"body":118},"Instalación en un clic desde el Marketplace de ServOrbit","El Marketplace de ServOrbit instala Healthchecks en tu VPS sin línea de comandos: despliega el contenedor con el registro cerrado, crea la cuenta de administrador con una contraseña generada y publica la aplicación en HTTPS en un subdominio de tu dominio o en el subdominio gratuito del VPS. El usuario y la contraseña aparecen en tu área de cliente; solo queda crear tus comprobaciones.","Tus tareas programadas vigiladas, en tu propio VPS","Un VPS ServOrbit Ubuntu 24.04 con 1 GB de RAM basta para Healthchecks. Instalación en un clic desde el Marketplace, HTTPS en tu dominio o en el subdominio gratuito del VPS, y la cuenta de administrador creada para ti.","Instalar Healthchecks","\u002Fmarketplace\u002Fmonitorizacion-observabilidad\u002Fhealthchecks",[124,145,168],{"id":125,"slug":126,"slugs":127,"title":131,"excerpt":132,"readTime":133,"views":134,"isPinned":19,"publishedAt":135,"updatedAt":136,"category":137,"categories":142,"featuredImage":30,"bgImage":31,"posterImage":144,"relatedSolution":30},230,"cron-vs-systemd-timers-automatizar-vps-linux",{"fr":128,"en":129,"ar":130,"es":126},"cron-systemd-timers-automatisation-vps","cron-vs-systemd-timers-automate-your-linux-vps","cron-مقابل-systemd-timers-أتمتة-vps-linux","cron vs systemd timers: automatizar su VPS Linux","Comparativa práctica de cron y systemd timers: sintaxis, logs, migración y solución de problemas para sus tareas recurrentes en un VPS Linux.",12,1,"2026-08-06T00:00:00+00:00","2026-09-20T21:13:53+00:00",{"id":138,"name":139,"slug":140,"color":141,"icon":140},2,"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[143],{"id":138,"name":139,"slug":140,"color":141,"icon":140},"\u002Fblog\u002Fcovers\u002Fcron-systemd-timers-automatisation-vps-poster.svg",{"id":146,"slug":147,"slugs":148,"title":152,"excerpt":153,"readTime":154,"views":138,"isPinned":19,"publishedAt":155,"updatedAt":156,"category":157,"categories":163,"featuredImage":30,"bgImage":31,"posterImage":165,"relatedSolution":166},194,"autoalojar-ntfy-en-un-vps",{"fr":149,"en":150,"ar":151,"es":147},"self-host-ntfy-vps","self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd","استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd","Alojar ntfy en un VPS: notificaciones push para sus scripts","Despliegue ntfy en su VPS y envíe notificaciones push desde cualquier script, cron o pipeline CI\u002FCD con un simple curl — sin SaaS ni clave de API.",11,"2026-07-28T00:00:00+00:00","2026-10-13T14:10:29+00:00",{"id":158,"name":159,"slug":160,"color":161,"icon":162},8,"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[164],{"id":158,"name":159,"slug":160,"color":161,"icon":162},"\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":34,"appSlug":167},"ntfy",{"id":169,"slug":170,"slugs":171,"title":175,"excerpt":176,"readTime":158,"views":18,"isPinned":19,"publishedAt":177,"updatedAt":178,"category":179,"categories":180,"featuredImage":30,"bgImage":31,"posterImage":182,"relatedSolution":183},105,"supervisar-vps-con-uptime-kuma",{"fr":172,"en":173,"ar":174,"es":170},"superviser-vps-uptime-kuma","monitoring-your-vps-with-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","Supervisar su VPS con Uptime Kuma","Despliegue Uptime Kuma en su VPS para supervisar sus sitios y servicios en self-hosted, con alertas y página de estado pública.","2026-03-07T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":158,"name":159,"slug":160,"color":161,"icon":162},[181],{"id":158,"name":159,"slug":160,"color":161,"icon":162},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":34,"appSlug":184},"uptime-kuma",1792885064768]