Aller au contenu

[Résolu]Commande docker dans un script qui ne fonctionne pas dans le planificateur de tâches


Messages recommandés

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é par MilesTEG1
ajout d'un essai supplémentaire
Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.