O problema do cron é que nada acontece quando falha. Nenhuma página fica em baixo, nenhum erro é mostrado; o backup simplesmente não está lá quando precisa dele.
O padrão heartbeat
Atribua a cada tarefa um URL único. A tarefa chama-o em caso de sucesso. Um monitor espera a chamada a cada N horas; se atrasar, recebe um alerta.
Cron
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 https://hb.uptimepush.com/p/TOKENTimers do systemd
Adicione ExecStartPost=/usr/bin/curl -fsS https://hb.uptimepush.com/p/TOKEN à unidade de serviço.
CronJob do Kubernetes
Acrescente a chamada curl ao comando do contentor com && para que só seja executada em caso de sucesso.
GitHub Actions
Adicione um passo final que faça curl ao URL, com o token guardado como secret.
Períodos de tolerância
Defina um período de tolerância ligeiramente superior à execução normal mais longa da tarefa, para que uma noite mais lenta não o acorde.