J'ai une machine serveur Ubuntu server 16.04 avec MS-SQLServer installée.
J'essaie de créer une sauvegarde planifiée pour les bases de données sur une base hebdomadaire le jeudi 16:00:00.
Le script pour créer une sauvegarde est:
#!/bin/bash
echo "Creating backup directory"
fn="backup-"$(date +"%d-%m-%Y")
dir="/data/mssql/$fn"
echo $dir
mkdir $dir
echo "Creating backups"
sqlcmd -H localhost -U SA -P Password -Q "Backup database [DB1] to disk='$dir/DB1.bak'"
sqlcmd -H localhost -U SA -P Password -Q "Backup database [DB2] to disk='$dir/DB2.bak'"
echo "Backups created, creating MD5 checksums"
md5sum $dir/* > $dir/checksum
echo "Checksums created, preparing for upload by compressing folder"
tar -zcvf $fn.tar.gz $dir
J'utilise Systemd Timers pour planifier le processus de sauvegarde:
Le sqlback.timer
:
[Unit]
Description= Schedule a weekly backup of MS-SQL Server database
[Timer]
OnCalendar=thu 16:00
Persistent=true
Unit=sqlback.service
[Install]
WantedBy=timers.target
et le fichier de service:
[Unit]
Description= Create weekly backup of MS-SQL Server databases for the DB1 and DB2
[Service]
User=mssql
Group=mssql
Type=simple
ExecStart=/bin/bash /usr/bin/sql_backup.sh
[Install]
WantedBy=multi-user.target
Lorsque le service démarre selon sa planification, la sauvegarde est créée avec succès, la prochaine consiste à compresser, tar
échoue et donne le message suivant:
آب 15 12:53:22 main bash[9576]: tar: backup-15-08-2018.tar.gz: Cannot write: Broken pipe
آب 15 12:53:22 main bash[9576]: tar: Error is not recoverable: exiting now
Cependant, si j'exécute le script manuellement en utilisant Sudo
et su
, tout fonctionne correctement.
Donnez un chemin complet dans la variable fn
. Ou ajoutez
cd $dir
Vérifiez également si l'utilisateur mssql
dispose de privilèges pour écrire dans le répertoire de sauvegarde.