Outils pour utilisateurs

Outils du site


backup:pbs

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
backup/pbs.txt · Dernière modification : de evann