Einen systemd-Backup-Timer & -Dienst in 10 Sekunden erstellen
In unserem vorherigen Beitrag Einen systemd-Dienst für Ihr docker-compose-Projekt in 10 Sekunden erstellen haben wir ein Skript vorgestellt, das automatisch einen systemd-Dienst erstellt, um ein docker-compose-basiertes Projekt zu starten. In diesem Beitrag zeigen wir
Zuerst müssen Sie eine Datei namens backup.sh in dem Verzeichnis erstellen, in dem sich docker-compose.yml befindet. Diese Datei wird vom systemd-Dienst jeden Tag ausgeführt. Was diese Datei enthält, ist ganz Ihnen überlassen, und wir werden in zukünftigen Blogposts Beispiele geben.
Zweitens, führen Sie aus
wget -qO- https://techoverflow.net/scripts/create-backup-service.sh | sudo bash /dev/stdinaus dem Verzeichnis, in dem sich docker-compose.yml befindet. Beachten Sie, dass das Skript den Verzeichnisnamen als Namen für den erstellten Dienst und Timer verwendet. Wenn Sie das Skript beispielsweise in /var/lib/redmine-mydomain ausführen, wird redmine-mydomain-backup als Dienstname verwendet.
Beispielausgabe des Skripts:
Creating systemd service... /etc/systemd/system/redmine-mydomain-backup.service
Creating systemd timer... /etc/systemd/system/redmine-mydomain-backup.timer
Enabling & starting redmine-mydomain-backup.timer
Created symlink /etc/systemd/system/timers.target.wants/redmine-mydomain-backup.timer → /etc/systemd/system/redmine-mydomain-backup.timer.Das Skript erstellt /etc/systemd/systemd/redmine-mydomain-backup.service mit der Spezifikation, was genau ausgeführt werden soll:
[Unit]
Description=redmine-mydomain-backup
[Service]
Type=oneshot
ExecStart=/bin/bash backup.sh
WorkingDirectory=/var/lib/redmine-mydomainund /etc/systemd/systemd/redmine-mydomain-backup.timer mit der Logik, wann der .service gestartet wird:
[Unit]
Description=redmine-mydomain-backup
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.targetund wird den Timer automatisch starten und aktivieren. Das bedeutet: keine weiteren Schritte sind nach dem Ausführen dieses Skripts nötig!
Um den aktuellen Status des Dienstes anzuzeigen, verwenden Sie z.B.
sudo systemctl status redmine-mydomain-backup.timerBeispielausgabe:
● redmine-mydomain-backup.timer - redmine-mydomain-backup
Loaded: loaded (/etc/systemd/system/redmine-mydomain-backup.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2020-12-10 02:50:31 CET; 19min ago
Trigger: Fri 2020-12-11 00:00:00 CET; 20h left
Triggers: ● redmine-mydomain-backup.service
Dec 10 02:50:31 myserverhostname systemd[1]: Started redmine-mydomain-backup.In der Zeile
Trigger: Fri 2020-12-11 00:00:00 CET; 20h leftkönnen Sie sehen, wann der Dienst als nächstes ausgeführt wird. Standardmäßig generiert das Skript Aufgaben, die OnCalendar=daily ausführen, was bedeutet, dass der Dienst jeden Tag um 00:00:00 ausgeführt wird. Lesen Sie die systemd.time-Manpage für weitere Informationen zur Syntax, die Sie verwenden können, um andere Zeitrahmen anzugeben.
Um das Backup sofort auszuführen (es wird danach immer noch täglich ausgeführt), führen Sie aus
sudo systemctl start redmine-mydomain-backup.service(beachten Sie, dass Sie systemctl start auf dem .service ausführen müssen! systemctl start auf dem .timer aktiviert nur den Timer und führt den Dienst nicht sofort aus).
Um die Logs anzuzeigen, verwenden Sie
sudo journalctl -xfu redmine-mydomain-backup.service(genau wie oben müssen Sie journalctl -xfu auf dem .service ausführen, nicht auf dem .timer).
Um automatische Backups zu deaktivieren, verwenden Sie z.B.
sudo systemctl disable redmine-mydomain-backup.timerQuellcode:
#!/bin/bash
# Einen systemd-Dienst & Timer erstellen, der das gegebene Backup täglich ausführt
# by Uli Köhler - https://techoverflow.net
# Licensed as CC0 1.0 Universal
export SERVICENAME=$(basename $(pwd))-backup
export SERVICEFILE=/etc/systemd/system/${SERVICENAME}.service
export TIMERFILE=/etc/systemd/system/${SERVICENAME}.timer
echo "Creating systemd service... $SERVICEFILE"
sudo cat >$SERVICEFILE <<EOF
[Unit]
Description=$SERVICENAME
[Service]
Type=oneshot
ExecStart=/bin/bash backup.sh
WorkingDirectory=$(pwd)
EOF
echo "Creating systemd timer... $TIMERFILE"
sudo cat >$TIMERFILE <<EOF
[Unit]
Description=$SERVICENAME
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
echo "Enabling & starting $SERVICENAME.timer"
sudo systemctl enable $SERVICENAME.timer
sudo systemctl start $SERVICENAME.timer