fix(backup): PATH explicite dans les scripts lancés par cron

Les backups nocturnes du 4 et 5 octobre ont échoué ("restic : commande
introuvable") : cron ne fournit que /usr/bin:/bin alors que restic est
dans /usr/local/bin. Testé avec le PATH de cron (systemd-run -E).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre Martin
2026-10-05 23:26:27 +02:00
co-authored by Claude Opus 5.5
parent 3fc9ae52c9
commit c92248c821
3 changed files with 5 additions and 0 deletions
+1
View File
@@ -116,6 +116,7 @@ Endpoints utiles :
- Contenu : dumps SQL de toutes les bases (`/var/backups/sans-pub-db/`, détection auto MySQL/MariaDB/PostgreSQL), volumes Docker (hors registres, previews et logs Nextcloud), `/captain/data` (hors registry), `/home/cloud/apps_data`, `/root/backup`, `/etc`. Les fichiers bruts d'une base sont exclus **seulement si son dump a réussi** (sinon sauvegardés en repli) - Contenu : dumps SQL de toutes les bases (`/var/backups/sans-pub-db/`, détection auto MySQL/MariaDB/PostgreSQL), volumes Docker (hors registres, previews et logs Nextcloud), `/captain/data` (hors registry), `/home/cloud/apps_data`, `/root/backup`, `/etc`. Les fichiers bruts d'une base sont exclus **seulement si son dump a réussi** (sinon sauvegardés en repli)
- Particularités des bases : `limesurvey-mariadb-db` n'accepte root qu'en TCP (`-h127.0.0.1`, le mot de passe de `root@localhost` est différent) ; `writefreely-db` a une table `mysql.proc` incompatible (dump sans `--routines`). Le script essaie automatiquement ces variantes - Particularités des bases : `limesurvey-mariadb-db` n'accepte root qu'en TCP (`-h127.0.0.1`, le mot de passe de `root@localhost` est différent) ; `writefreely-db` a une table `mysql.proc` incompatible (dump sans `--routines`). Le script essaie automatiquement ces variantes
- Premier snapshot complet : 2026-10-03 (~53 Gio, ~45 Gio stockés) ; restauration testée (`restic dump` + comparaison SHA256) - Premier snapshot complet : 2026-10-03 (~53 Gio, ~45 Gio stockés) ; restauration testée (`restic dump` + comparaison SHA256)
- ⚠️ Les scripts lancés par `/etc/cron.d/` n'ont que `PATH=/usr/bin:/bin` : d'où le `export PATH=...` en tête des scripts (restic dans `/usr/local/bin` → backups du 4 et 5 octobre 2026 en échec). Tester un script cron avec `systemd-run -E PATH=/usr/bin:/bin <script>`
- Rétention : 7 quotidiens, 4 hebdos, 6 mensuels ; `prune` + `check` (5 % des données) le dimanche - Rétention : 7 quotidiens, 4 hebdos, 6 mensuels ; `prune` + `check` (5 % des données) le dimanche
- Log : `/var/log/restic-backup.log` ; mail à `pierre@sans.pub` en cas d'échec (via SMTP de poste.io `mail.sans.pub:465`, donc **pas d'alerte si le serveur entier tombe**) - Log : `/var/log/restic-backup.log` ; mail à `pierre@sans.pub` en cas d'échec (via SMTP de poste.io `mail.sans.pub:465`, donc **pas d'alerte si le serveur entier tombe**)
- Consulter : `ssh sans.pub 'sudo bash -c ". /root/restic/env && restic snapshots"'` - Consulter : `ssh sans.pub 'sudo bash -c ". /root/restic/env && restic snapshots"'`
+2
View File
@@ -1,6 +1,8 @@
#!/bin/bash #!/bin/bash
# Backup quotidien sans.pub : dumps des bases + restic vers OVH Swift (conteneur sans-pub-restic) # Backup quotidien sans.pub : dumps des bases + restic vers OVH Swift (conteneur sans-pub-restic)
# Installé dans /root/restic/backup.sh, lancé par /etc/cron.d/restic-backup # Installé dans /root/restic/backup.sh, lancé par /etc/cron.d/restic-backup
# cron ne fournit que /usr/bin:/bin ; restic est dans /usr/local/bin
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set -uo pipefail set -uo pipefail
LOG=/var/log/restic-backup.log LOG=/var/log/restic-backup.log
+2
View File
@@ -2,6 +2,8 @@
# Synchronise le certificat Let's Encrypt de mail.sans.pub (renouvelé par CapRover) # Synchronise le certificat Let's Encrypt de mail.sans.pub (renouvelé par CapRover)
# vers poste.io, qui ne sait pas le renouveler lui-même derrière le nginx de CapRover. # vers poste.io, qui ne sait pas le renouveler lui-même derrière le nginx de CapRover.
# Installé dans /root/mail-cert-sync.sh, lancé chaque jour par /etc/cron.d/mail-cert-sync # Installé dans /root/mail-cert-sync.sh, lancé chaque jour par /etc/cron.d/mail-cert-sync
# cron ne fournit que /usr/bin:/bin
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set -euo pipefail set -euo pipefail
LIVE=/captain/data/letencrypt/etc/live/mail.sans.pub LIVE=/captain/data/letencrypt/etc/live/mail.sans.pub