MilesTEG1 Posté(e) le 14 avril 2021 Partager Posté(e) le 14 avril 2021 (modifié) Bonjour, J'ai un soucis avec le script en fin de message (car il est un peu long...). La commande docker suivante ne passe pas : docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(/usr/local/bin/docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini" Et même la version sans variables ne passe pas : docker exec -u 1060 -it -w /backup-data $(/usr/local/bin/docker ps -qf "name=gitea") bash -c "/app/gitea/gitea dump -c /data/gitea/conf/app.ini" L'erreur retournée dans le mail de notification est : Citation Tâche : Backup Gitea Data Heure de début : Wed, 14 Apr 2021 15:19:59 GMT Heure d’arrêt : Wed, 14 Apr 2021 15:20:00 GMT État actuel : 1 (Interrompu) Sortie standard/erreur : 15:19:59 - Script de sauvegarde des données du conteneur Gitea -- Les dossiers backup-data et data existent bien. On peut continuer. -- Sauvegarde via Gitea dump. (un peu chiant à restaurer...) ############################################################################### the input device is not a TTY !!!!!! Erreur lors de la commande de backup gitea dump. !!!!!! Abandon, avec code d'erreur 1 De Syno-DS920Plus Que la commande soit précédée par un sudo ou non, ou que le chemin /usr/local/bin/ devant ou non, ça ne fonctionne pas mieux... Pour être sûr que la commande docker fonctionne dans uns script, j'ai fait un petit script test avec : docker ps Dans l'email de notification je reçois bien le résultat d'un docker ps avec la liste des conteneurs lancés. Donc la commande docker est bien reconnue. Ce qui ne va pas est donc ce qui suit... Je précise que lancer le script depuis une invite SSH (iTerm2 ou Windows Terminal), fonctionne bien : Citation root@Syno-DS920Plus:/volume1/docker/_Scripts-DOCKER# ./gitea-backup.sh 15:32:03 - Script de sauvegarde des données du conteneur Gitea -- Les dossiers backup-data et data existent bien. On peut continuer. -- Sauvegarde via Gitea dump. (un peu chiant à restaurer...) ############################################################################### 2021/04/14 15:32:04 ...dules/setting/git.go:101:newGit() [I] Git Version: 2.30.2, Wire Protocol Version 2 Enabled 2021/04/14 15:32:04 ...dules/setting/log.go:287:newLogService() [I] Gitea v1.14.0 built with GNU Make 4.3, go1.16.3 : bindata, timetzdata, sqlite, sqlite_unlock_notify 2021/04/14 15:32:04 ...dules/setting/log.go:333:newLogService() [I] Gitea Log Mode: Console(Console:info) 2021/04/14 15:32:04 ...dules/setting/log.go:250:generateNamedLogger() [I] Router Log: Console(console:info) 2021/04/14 15:32:04 ...les/setting/cache.go:73:newCacheService() [I] Cache Service Enabled 2021/04/14 15:32:04 ...les/setting/cache.go:88:newCacheService() [I] Last Commit Cache Service Enabled 2021/04/14 15:32:04 ...s/setting/session.go:77:newSessionService() [I] Session Service Enabled 2021/04/14 15:32:04 ...es/setting/mailer.go:109:newMailService() [I] Mail Service Enabled 2021/04/14 15:32:04 ...es/setting/mailer.go:120:newRegisterMailService() [I] Register Mail Service Enabled 2021/04/14 15:32:04 ...es/setting/mailer.go:131:newNotifyMailService() [I] Notify Mail Service Enabled 2021/04/14 15:32:04 ...s/storage/storage.go:158:initAttachments() [I] Initialising Attachment storage with type: 2021/04/14 15:32:04 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments 2021/04/14 15:32:04 ...s/storage/storage.go:152:initAvatars() [I] Initialising Avatar storage with type: 2021/04/14 15:32:04 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars 2021/04/14 15:32:04 ...s/storage/storage.go:170:initRepoAvatars() [I] Initialising Repository Avatar storage with type: 2021/04/14 15:32:04 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars 2021/04/14 15:32:04 ...s/storage/storage.go:164:initLFS() [I] Initialising LFS storage with type: 2021/04/14 15:32:04 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs 2021/04/14 15:32:04 cmd/dump.go:212:runDump() [I] Dumping local repositories... /data/git/repositories 2021/04/14 15:32:04 cmd/dump.go:254:runDump() [I] Dumping database... 2021/04/14 15:32:04 cmd/dump.go:266:runDump() [I] Adding custom configuration file from /data/gitea/conf/app.ini 2021/04/14 15:32:04 cmd/dump.go:282:runDump() [I] Custom dir /data/gitea is inside data dir /data/gitea, skipped 2021/04/14 15:32:04 cmd/dump.go:294:runDump() [I] Packing data directory.../data/gitea ############################################################################### -- Sauvegarde via Gitea dump terminée. -- Sauvegarde par création d'une archive de tout le dossier data ############################################################################### -- Extinction du conteneur gitea gitea Creating archive backup-data/Gitea-Data-Backup-2021-04-14--15h32m07s.7z Total: 18446744073709551615 Compressing [Content] Everything is Ok -- Archive de tout le dossier data créée. -- Redémarrage du conteneur Gitea... gitea ############################################################################### -- Processus de sauvegarde par création d'archive terminé. 15:32:11 - Fin du script de sauvegarde des donneés du conteneur Gitea Donc voilà, comment rendre fonctionnelle cette ligne de commande permettant de faire la sauvegarde des données via ce qui est fourni par la doc officielle ? Merci d'avance. Le script lui même : ##============================================================================================== ## ## ## Script gitea-backup.sh ## ## ## ##============================================================================================== ## ## ## gitea-backup.sh [<méthode de backup>] ## ## <méthode de backup> est facultatif. S'il n'est pas spécifié, on fait les deux ! ## ## <méthode de backup> = gitea_dump ## ## = archive_dossier ## ## ## ##============================================================================================== ##============================================================================================== ## ## ## Objectif du script : faire une sauvegarde de l'installation Gitea @ Docker ## ## Il y a aura un shutdown du conteneur le temps de la sauvegarde afin que la base de ## ## données ne soit pas modifiée pendant le backup, puis le conteneur sera redémarré. ## ## ## ## Il faudra créer une tâche planifiée pour lancer la sauvegarde toutes les nuits, par ## ## exemple à 3h du matin. ## ## ## ##============================================================================================== ## ## ## Une méthode officielle de backup de la base de données est présente ici : ## ## https://docs.gitea.io/en-us/backup-and-restore/#backup-command-dump ## ## ## ##============================================================================================== # Récupération des arguments qu'on place dans des variables constantes declare -r nb_arg=$# # Nombre d'argument(s) fourni(s) au script. declare -r methode="$1" # 1er argument fourni if [ "$methode" = "--help" ] || [ "$methode" = "-help" ] || [ "$methode" = "-h" ] || [ "$methode" = "--h" ]; then echo "Le script gitea-backup.sh permet de faire une sauvegarde des données du conteneur Gitea." echo "Utilisation : gitea-backup.sh [<méthode de backup>]" echo "L'argument <méthode de backup> est facultatif. S'il n'est pas spécifié, on fait les deux !" echo " <méthode de backup> = gitea_dump" echo " = archive_dossier" echo exit 0 fi mode_backup=0 # 0 = aucune méthode indiquée ; 1 = gitea_dump ; 2 = archive_dossier ##──── ──────────────────────────────────────────────────────────────────────────────────────── ##──── ──────────────────────────────────────────────────────────────────────────────────────── ## ## ## VALEURS À PERSONNALISER ## ## ## ## Chemin d'accès vers votre dossier docker et vers le dossier de backup de gitea ## # Chemin du dossier qui contient le dossier des données (data) et des backups (backup-data) GITEA_DOCKER_DIR=/volume1/docker/gitea # Les noms des dossiers montés dans le conteneur doivent êtres identiques à ceux présents sur la machine hôte. Sinon faudra modifier le script... # Nom du dossier contenant les backups qui doit exister car il doit être monté dans le conteneur à l'aide du docker-compose.yml. GITEA_BACKUP_DIR=backup-data # Nom du dossier contenant les donneés de Gitea (data) GITEA_DATA_DIR=data # Nom du conteneur NOM_CONTENEUR=gitea # ID de l'utilisateur du NAS qui a les droits sur le conteneur ID_USER_NAS=1060 ##──── ──────────────────────────────────────────────────────────────────────────────────────── ##──── ──────────────────────────────────────────────────────────────────────────────────────── echo "$(date "+%R:%S - ") Script de sauvegarde des données du conteneur Gitea" ##============================================================================================== ## Vérification de la présence des dossiers du conteneur ## cd $GITEA_DOCKER_DIR num_erreur=$? # On stocke le code de retour de la commande précédente. if [ $num_erreur -ne 0 ]; then # Si ce code n'est pas 0, il y a eu une erreur, on arrète le script. echo " Le chemin '$GITEA_DOCKER_DIR' est invalide ! Veuillez vérifier le chemin d'accès..." echo " Abandon, avec code d'erreur $num_erreur" exit $num_erreur fi if [ ! -d "$GITEA_BACKUP_DIR" ] || [ ! -d "$GITEA_DATA_DIR" ]; then # Au moins un des dossiers n'existe pas if [ ! -d "$GITEA_BACKUP_DIR" ]; then # Le dossier $GITEA_BACKUP_DIR n'existe pas ! echo " Le dossier '$GITEA_BACKUP_DIR' n'existe pas !" fi if [ ! -d "$GITEA_DATA_DIR" ]; then # Le dossier $GITEA_DATA_DIR n'existe pas ! echo " Le dossier '$GITEA_DATA_DIR' n'existe pas !" fi echo " Abandon, avec code d'erreur $num_erreur" exit 999 else echo "-- Les dossiers $GITEA_BACKUP_DIR et $GITEA_DATA_DIR existent bien. On peut continuer." fi ##============================================================================================== ##============================================================================================== ## ## ## Définition du mode de backup à faire en fonction de la méthode donnée en argument ## case $methode in gitea_dump) # Méthode gitea_dump sélectionnée ## mode_backup=1 #echo "mode_backup=$mode_backup" ;; archive_dossier) # Méthode archive_dossier sélectionnée ## mode_backup=2 #echo "mode_backup=$mode_backup" ;; *) # Aucune méthode sélectionnée ## mode_backup=0 #echo "mode_backup=$mode_backup" ;; esac ##============================================================================================== ##============================================================================================== ## ## ## Partie concernant les sauvegardes ## if [ $mode_backup -eq 0 ] || [ $mode_backup -eq 1 ]; then # Aucune méthode n'est choisie ou bien méthode gitea_dump sélectionnée # Rappel des variables : # GITEA_DOCKER_DIR=/volume1/docker/gitea # GITEA_BACKUP_DIR=backup-data # GITEA_DATA_DIR=data # NOM_CONTENEUR=gitea # ID_USER_NAS=1060 echo "-- Sauvegarde via Gitea dump. (un peu chiant à restaurer...)" echo "###############################################################################" # Dans la commande suivante, les chemins d'accès donnés en paramètres sont des chemins d'accès à l'intérieur du conteneur, montés avec le docker-compose.yml. # Exemple de commande sans variables : # docker exec -u 1060 -it -w /backup-data $(docker ps -qf "name=gitea") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini' docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(/usr/local/bin/docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini" num_erreur=$? # On stocke le code de retour de la commande précédente. if [ $num_erreur -ne 0 ]; then # Si ce code n'est pas 0, il y a eu une erreur, on arrète le script. echo "!!!!!! Erreur lors de la commande de backup gitea dump." #echo "!!!!!! Commande lancée :" #echo " docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini"" echo "!!!!!! Abandon, avec code d'erreur $num_erreur" exit $num_erreur fi echo "###############################################################################" echo "-- Sauvegarde via Gitea dump terminée." fi if [ $mode_backup -eq 0 ] || [ $mode_backup -eq 2 ]; then # Aucune méthode n'est choisie ou bien méthode archive_dossier sélectionnée echo "-- Sauvegarde par création d'une archive de tout le dossier $GITEA_DATA_DIR" echo "###############################################################################" echo "-- Extinction du conteneur $NOM_CONTENEUR" cd $GITEA_DOCKER_DIR # Même si on est censé déjà être là... docker stop $NOM_CONTENEUR tar -czf $GITEA_BACKUP_DIR/Gitea-Data-Backup-`date +%Y-%m-%d--%Hh%Mm%Ss`.tar.gz ./$GITEA_DATA_DIR # On Linux/Unix, in order to backup directories you must use tar : # - to backup a directory : tar cf - directory | 7z a -si directory.tar.7z # - to restore your backup : 7z x -so directory.tar.7z | tar xf - tar cf - ./$GITEA_DATA_DIR | 7z a -si $GITEA_BACKUP_DIR/Gitea-Data-Backup-`date +%Y-%m-%d--%Hh%Mm%Ss`.7z echo "-- Archive de tout le dossier $GITEA_DATA_DIR créée." echo "-- Redémarrage du conteneur Gitea..." docker start $NOM_CONTENEUR echo "###############################################################################" echo "-- Processus de sauvegarde par création d'archive terminé." fi echo "$(date "+%R:%S - ") Fin du script de sauvegarde des donneés du conteneur Gitea" exit 0 ## ## ##============================================================================================== Modifié le 14 avril 2021 par MilesTEG1 ajout d'un essai supplémentaire Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 14 avril 2021 Partager Posté(e) le 14 avril 2021 Tu as ajouté l'argument -t à ta commande, dixit la doc : https://docs.docker.com/engine/reference/commandline/exec/ Or, tu es en cron, donc il n'y a pas de terminal, pour moi il faut enlever cet argument. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
MilesTEG1 Posté(e) le 14 avril 2021 Auteur Partager Posté(e) le 14 avril 2021 @.Shad. Merci beaucoup ! Sans le -t tout fonctionne parfaitement 😄 Je n'avais pas pensé à aller voir la doc, mais je t'avoie que si je lavais fait, je n'aurais pas trouvé... 👍🏻 En tout cas, super merci !! 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lelolo Posté(e) le 18 avril 2021 Partager Posté(e) le 18 avril 2021 Le problème est maintenant résolu. N'hésitez pas à ouvrir un nouveau message en cas de problème. Ceci est une réponse automatique. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés