release-2 #2

Merged
scriptos merged 3 commits from release-2 into main 2025-08-23 10:01:22 +00:00
2 changed files with 48 additions and 9 deletions

View File

@ -1,10 +1,10 @@
#!/bin/bash #!/bin/bash
# Script Name: pbs-backup.v1.sh # Script Name: pbs-backup.v1.sh
# Beschreibung: Erstellt Backups auf einem PBS # Beschreibung: Erstellt Backups auf einem PBS
# Aufruf: ./pbs-backup-script.v1_msmtp.sh # Aufruf: ./pbs-backup-script.v1.sh
# Autor: Patrick Asmus # Autor: Patrick Asmus
# Web: https://www.techniverse.net # Web: https://www.techniverse.net
# Git-Reposit.: ssh://git@git.techniverse.net:10022/internal-infrastructure/pbs-backup-scripts.git # Git-Reposit.: https://git.techniverse.net/scriptos/pbs-backup-client-script.git
# Version: 1.1 # Version: 1.1
# Datum: 13.09.2024 # Datum: 13.09.2024
# Modifikation: added email support # Modifikation: added email support

View File

@ -1,6 +1,6 @@
# PBS Backup Client Script # PBS Backup Client Script
Dieses Bash-Script erstellt hostbasierte Datei-Backups (pxar) zu einem Proxmox Backup Server (PBS) und benachrichtigt dich bei Erfolg oder Fehler per E-Mail sowie optional via Ntfy. Es ist für den automatisierten Betrieb (z. B. Cron) ausgelegt und nutzt eine ausgelagerte Konfigurationsdatei. Dieses Bash-Script erstellt hostbasierte Datei-Backups (pxar) zu einem Proxmox Backup Server (PBS) und benachrichtigt dich bei Erfolg oder Fehler optional per E-Mail sowie via Ntfy. Es ist für den automatisierten Betrieb (z. B. Cron) ausgelegt und nutzt eine ausgelagerte Konfigurationsdatei.
## Features ## Features
- pxar-Backups definierter Verzeichnisse zu PBS - pxar-Backups definierter Verzeichnisse zu PBS
@ -12,29 +12,29 @@ Dieses Bash-Script erstellt hostbasierte Datei-Backups (pxar) zu einem Proxmox B
- TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional) - TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional)
## Konfiguration ## Konfiguration
Alle Einstellungen liegen **ausschließlich** in der Konfigurationsdatei. Standard: `pbs-backup.v2.conf` im selben Verzeichnis wie das Script; alternativ den Pfad per Umgebungsvariable setzen: Alle Einstellungen liegen **ausschließlich** in der Konfigurationsdatei. Standard: `pbs-backup.v2.conf` im selben Verzeichnis wie das Script; alternativ den Pfad per Umgebungsvariable im Script setzen:
`CONFIG_FILE=/pfad/zur/pbs-backup.v2.conf`. `CONFIG_FILE=/pfad/zur/pbs-backup.v2.conf`.
**PBS-Variablen:** **PBS-Variablen:**
- `PBS_REPOSITORY` (Pflicht): Repository-String im Format - `PBS_REPOSITORY` (Pflicht): Repository-String im Format
ohne Port: ohne Port, wenn PBS unter dem Standard-Port erreichbar ist:
`root@pam!<apiuser>@<pbs-host>:<datastore>` `root@pam!<apiuser>@<pbs-host>:<datastore>`
mit Port (z. B. öffentlich via HTTPS): mit Port (z. B. öffentlich via HTTPS):
`root@pam!<apiuser>@<pbs-host>:<port>:<datastore>` `root@pam!<apiuser>@<pbs-host>:<port>:<datastore>`
Beispiel: Beispiel:
`root@pam!vps-backup@pbs.domain.com:443:backup2` `root@pam!vps-backup@pbs.domain.com:443:backup2`
Hinweis: Wenn der PBS aus dem Internet über einen anderen Port als den `8007` erreichbar ist, **muss** der HTTPS-Port angegeben werden. Hinweis: Wenn der PBS aus dem Internet über einen anderen Port als den `8007` erreichbar ist, **muss** der Port angegeben werden.
- `PBS_FINGERPRINT` (optional): Nur erforderlich bei selbstsigniertem Zertifikat; sonst **leer lassen**. - `PBS_FINGERPRINT` (optional): Nur erforderlich bei selbstsigniertem Zertifikat; sonst **leer lassen**.
- `PBS_API` (Pflicht für Auth): API-Key für die Authentifizierung. Das Script setzt ihn intern nur im Subshell als `PBS_PASSWORD`, damit er nicht ins globale Environment oder in Logs gelangt. - `PBS_API` (Pflicht für Auth): API-Key für die Authentifizierung. Das Script setzt ihn intern nur im Subshell als `PBS_PASSWORD`, damit er nicht ins globale Environment oder in Logs gelangt.
**Weitere Optionen (Auszug):** **Weitere Optionen (Auszug):**
- `INCLUDE_DIRS`: Array der zu sichernden Verzeichnisse. - `INCLUDE_DIRS`: Array der zu sichernden Verzeichnisse.
- `LOGFILE`, `LOCKFILE`: Pfade für Log- und Lock-Datei. - `LOGFILE`, `LOCKFILE`: Pfade für Log- und Lock-Datei.
- Mail: `MAIL_ENABLED`, `MAIL_CMD`, `MAIL_RECIPIENTS`, `MAIL_NOTIFY_ON_SUCCESS`, `MAIL_SUBJECT_SUCCESS`, `MAIL_SUBJECT_FAILURE`. - Mail: `MAIL_ENABLED`, `MAIL_CMD`, `MAIL_RECIPIENTS`, `MAIL_NOTIFY_ON_SUCCESS`, `MAIL_SUBJECT_SUCCESS`, `MAIL_SUBJECT_FAILURE`.
- Ntfy: `NTFY_ENABLED`, `NTFY_TOPIC_URL`, `NTFY_AUTH_TOKEN`, `NTFY_NOTIFY_ON_SUCCESS`, `NTFY_TITLE_SUCCESS`, `NTFY_TITLE_FAILURE`, `NTFY_PRIORITY_SUCCESS`, `NTFY_PRIORITY_FAILURE`, `NTFY_TAIL_LINES`. - Ntfy: `NTFY_ENABLED`, `NTFY_TOPIC_URL`, `NTFY_AUTH_TOKEN`, `NTFY_NOTIFY_ON_SUCCESS`, `NTFY_TITLE_SUCCESS`, `NTFY_TITLE_FAILURE`, `NTFY_PRIORITY_SUCCESS`, `NTFY_PRIORITY_FAILURE`, `NTFY_TAIL_LINES`.
- Monitoring: `HEALTHCHECK_OK_FILE` (wird bei Erfolg geschrieben, bei Fehler entfernt). - Monitoring: `HEALTHCHECK_OK_FILE` (wird bei Erfolg geschrieben, bei Fehler entfernt).
> Abhängigkeiten: `proxmox-backup-client`, für Ntfy `curl`, für E-Mail z. B. `mail` (msmtp/mailx). > Abhängigkeiten: `proxmox-backup-client`, für Ntfy `curl`, für E-Mail z. B. `mail` (msmtp/mailx).
> Eine Anleitung zur Installation von `msmtp` gibt es hier: > Eine Anleitung zur Installation von `msmtp` gibt es hier:
> https://www.cleveradmin.de/blog/2024/12/linux-einfach-emails-versenden-mit-msmtp > https://www.cleveradmin.de/blog/2024/12/linux-einfach-emails-versenden-mit-msmtp
@ -58,6 +58,45 @@ Das Script liest automatisch `pbs-backup.v2.conf` aus dem Script-Verzeichnis. Ei
- Ruhige Ausgabe und ohne Ntfy: - Ruhige Ausgabe und ohne Ntfy:
`./pbs-backup.v2.sh -q --no-ntfy` `./pbs-backup.v2.sh -q --no-ntfy`
## Cronjob
Das Script besitzt eigenes Locking (`flock`) und ist damit für periodische Ausführung per Cron geeignet. Für Backups von Pfaden wie `/root` oder `/var/lib/docker/volumes/` sollte der Cronjob als **root** laufen.
### Variante A: `/etc/crontab` (empfohlen)
~~~cron
# /etc/crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
# Täglich um 02:30 Uhr ausführen
30 2 * * * root CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh >> /var/log/pbs-backup.cron.log 2>&1
# Optional schonender (CPU/IO) und mit reduzierter Ausgabe:
#30 2 * * * root ionice -c2 -n7 nice -n 10 CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh -q >> /var/log/pbs-backup.cron.log 2>&1
~~~
### Variante B: Benutzer-Crontab (nur wenn alle Pfade lesbar sind)
~~~bash
crontab -e
~~~
~~~cron
# Täglich um 02:30 Uhr (User-Crontab)
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
30 2 * * * CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh >> /var/log/pbs-backup.cron.log 2>&1
~~~
**Hinweise**
- Verwende **absolute Pfade** zum Script und zur Config.
- Die Script-Ausgabe landet zusätzlich im in der Config definierten `LOGFILE`. Der Cron-Redirect (`>> /var/log/pbs-backup.cron.log 2>&1`) ist optional als zusätzlicher Laufverlauf.
- Erst mit `--dry-run` testen:
~~~bash
CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh --dry-run
~~~
--- ---
## Abhängigkeiten & Installation (x86_64, Ubuntu 22.04/24.04) ## Abhängigkeiten & Installation (x86_64, Ubuntu 22.04/24.04)