[{"data":1,"prerenderedAt":186},["ShallowReactive",2],{"seo-verification":3,"blog-autoalojar-healthchecks-monitorizar-cron-vps-ma-es":6,"promo-bar-likely":20},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-autoalojar-healthchecks-monitorizar-cron-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":20,"publishedAt":21,"updatedAt":22,"category":23,"categories":29,"featuredImage":31,"bgImage":32,"posterImage":33,"relatedSolution":34,"intro":37,"sections":38,"ctaTitle":120,"ctaBody":121,"ctaButton":122,"ctaUrl":123,"relatedPosts":124},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,true,"2026-10-24T00:00:00+00:00","2026-11-04T16:30:29+00:00",{"id":24,"name":25,"slug":26,"color":27,"icon":28},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[30],{"id":24,"name":25,"slug":26,"color":27,"icon":28},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-healthchecks-vps-poster.svg",{"categorySlug":35,"appSlug":36},"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.",[39,43,53,85,88,104,108,111,114,117],{"type":40,"title":41,"body":42},"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":44,"title":45,"items":46},"ul","Lo que aporta Healthchecks",[47,48,49,50,51,52],"**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":54,"title":55,"headers":56,"rows":60},"comparison","Healthchecks frente a los métodos habituales",[5,57,58,59],"Healthchecks","MAILTO de cron","Monitor de disponibilidad",[61,65,69,72,76,81],[62,63,64,64],"Alerta si la tarea no arranca","Sí","No",[66,67,68,64],"Alerta si la tarea falla","Sí, código de salida o \u002Ffail","Solo si escribe en su salida",[70,71,64,64],"Duración de la ejecución","Medida",[73,74,63,75],"Máquinas sin puerto abierto","Sí, una simple llamada HTTPS saliente","No, hay que alcanzar el destino",[77,78,79,80],"Canales de alerta","Más de veinte integraciones","Correo local","Según la herramienta",[82,83,64,84],"Historial centralizado","Sí, por comprobación","Sí, para los servicios",{"type":40,"title":86,"body":87},"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":89,"title":90,"steps":91},"steps","Instalar Healthchecks con Docker Compose",[92,95,98,101],{"title":93,"body":94},"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":96,"body":97},"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":99,"body":100},"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":102,"body":103},"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":105,"title":106,"body":107},"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":40,"title":109,"body":110},"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":40,"title":112,"body":113},"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":40,"title":115,"body":116},"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":40,"title":118,"body":119},"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","\u002Fapplications\u002Fmonitorizacion-observabilidad\u002Fhealthchecks",[125,146,169],{"id":126,"slug":127,"slugs":128,"title":132,"excerpt":133,"readTime":134,"views":135,"isPinned":19,"noindex":19,"publishedAt":136,"updatedAt":137,"category":138,"categories":143,"featuredImage":31,"bgImage":32,"posterImage":145,"relatedSolution":31},230,"cron-vs-systemd-timers-automatizar-vps-linux",{"fr":129,"en":130,"ar":131,"es":127},"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":139,"name":140,"slug":141,"color":142,"icon":141},2,"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[144],{"id":139,"name":140,"slug":141,"color":142,"icon":141},"\u002Fblog\u002Fcovers\u002Fcron-systemd-timers-automatisation-vps-poster.svg",{"id":147,"slug":148,"slugs":149,"title":153,"excerpt":154,"readTime":155,"views":139,"isPinned":19,"noindex":19,"publishedAt":156,"updatedAt":157,"category":158,"categories":164,"featuredImage":31,"bgImage":32,"posterImage":166,"relatedSolution":167},194,"autoalojar-ntfy-en-un-vps",{"fr":150,"en":151,"ar":152,"es":148},"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.",16,"2026-07-28T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":159,"name":160,"slug":161,"color":162,"icon":163},8,"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[165],{"id":159,"name":160,"slug":161,"color":162,"icon":163},"\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":35,"appSlug":168},"ntfy",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":159,"views":18,"isPinned":19,"noindex":19,"publishedAt":178,"updatedAt":179,"category":180,"categories":181,"featuredImage":31,"bgImage":32,"posterImage":183,"relatedSolution":184},105,"supervisar-vps-con-uptime-kuma",{"fr":173,"en":174,"ar":175,"es":171},"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-11-09T20:55:19+00:00",{"id":159,"name":160,"slug":161,"color":162,"icon":163},[182],{"id":159,"name":160,"slug":161,"color":162,"icon":163},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":35,"appSlug":185},"uptime-kuma",1794270553622]