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
wget -qO- https://techoverflow.net/scripts/create-backup-service.sh | sudo bash /dev/stdindepuis 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 :
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 :
[Unit]
Description=redmine-mydomain-backup
[Service]
Type=oneshot
ExecStart=/bin/bash backup.sh
WorkingDirectory=/var/lib/redmine-mydomainet /etc/systemd/systemd/redmine-mydomain-backup.timer contenant la logique quand le .service est démarré :
[Unit]
Description=redmine-mydomain-backup
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.targetet 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.
sudo systemctl status redmine-mydomain-backup.timerExemple de sortie :
● 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
Trigger: Fri 2020-12-11 00:00:00 CET; 20h leftligne 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
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
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.
sudo systemctl disable redmine-mydomain-backup.timerCode source :
#!/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