Comment créer un service & timer de sauvegarde systemd en 10 secondes

Dans notre post précédent Créer un service systemd pour votre projet docker-compose en 10 secondes nous avons introduit un script qui crée automatiquement un service systemd pour démarrer un projet basé sur docker-compose. Dans ce post, nous montrerons

D’abord, vous devez créer un fichier nommé backup.sh dans le dossier où docker-compose.yml est situé. Ce fichier sera exécuté par le service systemd chaque jour. Ce que ce fichier contient est entièrement à vous et nous fournirons des exemples dans de futurs articles de blog.

Deuxièmement, exécutez

create-backup-service.sh
wget -qO- https://techoverflow.net/scripts/create-backup-service.sh | sudo bash /dev/stdin

depuis le dossier où docker-compose.yml est situé. Notez que le script utilisera le nom du dossier comme nom pour le service et le timer qui sont créés. Par exemple, exécuter le script dans /var/lib/redmine-mydomain fera que redmine-mydomain-backup sera utilisé comme nom de service.

Exemple de sortie du script :

output.txt
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.

Le script créera /etc/systemd/systemd/redmine-mydomain-backup.service contenant la spécification sur quoi exactement exécuter :

redmine-mydomain-backup.service
[Unit]
Description=redmine-mydomain-backup

[Service]
Type=oneshot
ExecStart=/bin/bash backup.sh
WorkingDirectory=/var/lib/redmine-mydomain

et /etc/systemd/systemd/redmine-mydomain-backup.timer contenant la logique quand le .service est démarré :

redmine-mydomain-backup.timer
[Unit]
Description=redmine-mydomain-backup

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

et démarrera et activera automatiquement le timer. Ceci signifie : aucune autre étape n’est nécessaire après avoir exécuté ce script !

Afin d’afficher le statut actuel du service, utilisez par ex.

status.sh
sudo systemctl status redmine-mydomain-backup.timer

Exemple de sortie :

output.txt
● 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.

Dans la

output.txt
Trigger: Fri 2020-12-11 00:00:00 CET; 20h left

ligne vous pouvez voir quand le service sera exécuté la prochaine fois. Par défaut, le script génère des tâches qui s’exécutent OnCalendar=daily, ce qui signifie que le service sera exécuté sur 00:00:00 chaque jour. Consultez la page de manuel systemd.time pour plus d’informations sur la syntaxe que vous pouvez utiliser pour spécifier d’autres plages horaires.

Afin d’exécuter la sauvegarde immédiatement (elle s’exécutera toujours quotidiennement après avoir fait cela), faites

start_backup.sh
sudo systemctl start redmine-mydomain-backup.service

(notez que vous devez exécuter systemctl start sur le .service ! Exécuter systemctl start sur le .timer activera seulement le timer et n’exécutera pas le service immédiatement).

Afin de voir les logs, utilisez

journal.sh
sudo journalctl -xfu redmine-mydomain-backup.service

(tout comme ci-dessus, vous devez exécuter journalctl -xfu sur le .service, pas sur le .timer).

Afin de désactiver les sauvegardes automatiques, utilisez par ex.

disable_timer.sh
sudo systemctl disable redmine-mydomain-backup.timer

Code source :

create-backup-service.sh
#!/bin/bash
# Crée un service & timer systemd qui exécute la sauvegarde donnée quotidiennement
# par Uli Köhler - https://techoverflow.net
# Licencié comme 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

Consultez les articles similaires par catégorie : Docker Linux