Table des matières
PBS
Hyperviseurs
Nous utilisons Proxmox Bakcup Serveur pour backuper les hyperviseurs. Le tout avec un cron SUPER propre :
@daily PBS_PASSWORD='REDACTED' PBS_FINGERPRINT='REDACTED' proxmox-backup-client backup etc.pxar:/etc root.pxar:/root var.pxar:/var usrlocal.pxar:/usr/local --repository grifon@pbs@pbs01.grifon.fr:zfs1t-grifon --all-file-systems
Comment dire que les mails issus du cron c'était un peu folklo… :)
Utilisation de systemd
Pour un tel système, passer par un timer (service) systemd ça permet d'utiliser un fichier .env pour les paramètres et de devoir faire un script.
On définit donc un service systemd et son timer associé :
- pve-backup.service
[Unit] Description=Backup PVE OnFailure=systemd_email@%n.service [Service] Type=oneshot EnvironmentFile=/etc/backup.env ExecStart=/usr/bin/proxmox-backup-client backup etc.pxar:/etc root.pxar:/root var.pxar:/var usrlocal.pxar:/usr/local --all-file-systems
- pve-backup.timer
[Unit] Description=Backup PVE [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
Une fois cela on peut facilement remplir le fichier .env - /etc/backup.env
PBS_PASSWORD='REDACTED' PBS_FINGERPRINT='REDACTED' PBS_REPOSITORY=grifon@pbs@pbs01.grifon.fr:zfs1t-grifon
Et voilà ! (enfin presque)
Envoi d'un mail en cas d'erreur
Vous remarquerez surement le OnFailure=systemd_email@%n.service
c'est un service systemd qui nous permet
d'envoyer par mail les logs de la dernière execution d'un service systemd (franchement inspiré de cette documentation).
Voici le script adapté a notre besoin :
- systemd_email@.service
[Unit] Description=status email for %i to adminsys@grifon.fr [Service] Type=oneshot ExecStart=/usr/local/bin/systemd-email adminsys@grifon.fr %i User=postfix Group=systemd-journal
- /usr/local/bin/systemd-email
- snippet.bash
#!/bin/sh mail -a "From: systemd <root@$(hostname -f)>" \ -s "$2 on $(hostname -f)" \ "$1" <<EOM $(systemctl status --full "$2") EOM
Script d'automatisation
Mais uniquement, parce que je suis fainéant !
- snippet.bash
#!/bin/bash pushd /etc/systemd/system cat > pve-backup.service << EOF [Unit] Description=Backup PVE OnFailure=systemd_email@%n.service [Service] Type=oneshot EnvironmentFile=/etc/backup.env ExecStart=/usr/bin/proxmox-backup-client backup etc.pxar:/etc root.pxar:/root var.pxar:/var usrlocal.pxar:/usr/local --all-file-systems EOF cat > pve-backup.timer << EOF [Unit] Description=Backup PVE [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target EOF cat > systemd_email@.service << EOF [Unit] Description=status email for %i to adminsys@grifon.fr [Service] Type=oneshot ExecStart=/usr/local/bin/systemd-email adminsys@grifon.fr %i User=postfix Group=systemd-journal EOF popd pushd /usr/local/bin cat > systemd-email << EOF #!/bin/sh mail -a "From: systemd <root@\$(hostname -f)>" \ -s "\$2 on \$(hostname -f)" \ "\$1" <<EOM \$(systemctl status --full "\$2") EOM EOF chmod +x systemd-email popd cat > /etc/backup.env << EOF PBS_PASSWORD='REDACTED' PBS_FINGERPRINT='REDACTED' PBS_REPOSITORY=grifon@pbs@pbs01.grifon.fr:zfs1t-grifon EOF chmod 600 /etc/backup.env systemctl daemon-reload systemctl enable --now pve-backup.timer systemctl start pve-backup.service systemctl start systemd_email@pve-backup.service.service