[script bash] Pourquoi attend-il ?

Autres projets et contributions
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

[script bash] Pourquoi attend-il ?

Message par djipey »

Bonjour.

J'ai depuis longtemps un script bash, qui sert à faire mes backups. Seulement, je crois que depuis que je suis passé à zsh, j'ai un comportement bizarre.

Code : Tout sélectionner

# On copie le tiddly wiki se trouvant sur le bureau.
cp -v $REPERTOIRE_SOURCE/Desktop/tiddly.html $REPERTOIRE_DESTINATION/ 2>> $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

notify-send "Recherche des doublons locaux..."
yes 1 | fdupes -rd /media/data/musique  > /dev/null #recherche des doublons de la musique locale
yes 1 | fdupes -rd /media/data/images  > /dev/null #recherche des doublons sur les images locales
notify-send "Recherche des doublons locaux achevée"
Entre l'exécution du cp et de l'autre bloc, le shell s'arrête. Je n'ai pas de prompt, mais je dois faire un Ctrl+C avant que le script ne continue de s’exécuter. Est-ce que vous sauriez comment comment empêcher ça ?

Bien à vous.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [script bash] Pourquoi attend-il ?

Message par benjarobin »

Peux ton voir l'intégralité du script ?
Essaye d'enlever la redirection de fichier "2>>" pour voir ce que cela donne
Tu n'aurait pas un alias sur cp ?
Essaye en préfixant ton cp par command : command cp ...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [script bash] Pourquoi attend-il ?

Message par djipey »

J'avais effectivement un alias sur cp, je 'ai enlevé pour tester. J'ai aussi essayé avec 'command'.

Mais en fait je crois que ça vient des fdupes. Il y en avait 3 dans mon script, et après chaque fdupes, le script s'arrête. Voici le script complet:

Code : Tout sélectionner

#!/bin/bash

#script de sauvegarde
#génère aussi un fichier nombre.txt pour compter les médias.
#1ère ligne: nombre de films
#deuxième ligne: nombre de musiques
#troisième ligne: nombre d'images

# On teste si le script est lancé en root avec id -u. Si on n'est pas root, on
# quitte.
#if [[ $(/usr/bin/id -u) -ne 0 ]]
#then
    #echo "Le script doit être lancé en root"
    #exit;
#fi

# On teste si le répertoire racine existe bien. S'il n'existe pas, le disque
# est absent et on quitte.
REPERTOIRE_DESTINATION="/run/media/djipey/BASE-1/.Save/"

if [ -e "$REPERTOIRE_DESTINATION" ]
then
	mkdir -p $REPERTOIRE_DESTINATION/`date '+%d_%m_%Y'`
	echo "On crée le répertoire daté pour la sauvegarde"
else
	echo "Warning: disque de sauvegarde absent!"
    exit;
fi

# On définit les répertoires source et destination
REPERTOIRE_SOURCE="/home/djipey"
backup="`date '+%d_%m_%Y'`"

echo $REPERTOIRE_DESTINATION

# On efface les logs du jour même, dans le cas d'une sauvegarde effectuée dans la journée.
rm $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log 2>> $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
notify-send "Logs du jour supprimés"

#création des répertoires pour la sauvegarde du jour
mkdir -v $REPERTOIRE_DESTINATION/$backup/vnstat 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
mkdir -v $REPERTOIRE_DESTINATION/$backup/vim_perso 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
mkdir -v $REPERTOIRE_DESTINATION/$backup/minecraft 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

# On synchronise les documents sur le SSD avec les documents sur le disque dur interne
rsync -Parv --delete $REPERTOIRE_SOURCE/documents /media/data 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
rsync -Parv --delete $REPERTOIRE_SOURCE/.local/share/data/"Mendeley Ltd./Mendeley Desktop" /media/data/documents && mv /media/data/documents/Mendeley\ Desktop /media/data/documents/Mendeley_backup 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
notify-send "Synchronisation locale des documents terminée"


# Option -a de cp, préserve les droits et est récursif
sudo cp -av /etc $REPERTOIRE_DESTINATION/$backup/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -av /var/lib/vnstat/ $REPERTOIRE_DESTINATION/$backup/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -av /usr/share/vim $REPERTOIRE_DESTINATION/$backup/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -av $REPERTOIRE_SOURCE/.vim/ $REPERTOIRE_DESTINATION/$backup/vim_perso 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -av $REPERTOIRE_SOURCE/.vimrc $REPERTOIRE_DESTINATION/$backup/vim_perso/vimrc 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -av $REPERTOIRE_SOURCE/.minecraft/* $REPERTOIRE_DESTINATION/$backup/minecraft/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -av $REPERTOIRE_SOURCE/.local/share/data/Mendeley\ Ltd./Mendeley\ Desktop/ $REPERTOIRE_DESTINATION/$backup/Mendeley_backup 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
notify-send "/etc, vnstat, minecraft, Mendeley et vim sauvegardés"

##on copie la sources.list, les ppa dans sources.list.d, et on liste ttes les applications installées
##cp -v /etc/apt/sources.list $REPERTOIRE_DESTINATION/backup 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
##cat /etc/apt/sources.list.d/*.list >> $REPERTOIRE_DESTINATION/backup/sources.list 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
##dpkg --get-selections > $REPERTOIRE_DESTINATION/backup/selections.txt 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
cp -a /etc/pacman.conf $REPERTOIRE_DESTINATION/$backup 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
pacman -Q | cut -d ' ' -f 1 > $REPERTOIRE_DESTINATION/$backup/all_paquets.txt 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
pacman -Qqe > $REPERTOIRE_DESTINATION/$backup/explicit_installed_paquets.txt 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
notify-send "Liste des paquets installés générée"

# On copie le tiddly wiki se trouvant sur le bureau.
cp -v $REPERTOIRE_SOURCE/Desktop/tiddly.html $REPERTOIRE_DESTINATION/ 2>> $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

## Analyse anti-virus avant sauvegarder
#notify-send "Début de l'analyse antivirus avant copie"
#clamscan -rv /media/data/ 2>> $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
#clamscan -rv $REPERTOIRE_SOURCE 2>> $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
#notify-send "Analyse antivirus terminée"

notify-send "Recherche des doublons locaux..."
yes 1 | fdupes -rd /media/data/musique  > /dev/null #recherche des doublons de la musique locale
#yes 1 | fdupes -rd /media/data/images  > /dev/null #recherche des doublons sur les images locales
#notify-send "Recherche des doublons locaux achevée"

#synchronisation des logs de pidgin, des dossiers pour firefox et thunderbird (courrier), de la musique, des documents, des documents pour Dropbox, et des images
notify-send "Synchronisation dossiers essentiels..."
rsync -Parv $REPERTOIRE_SOURCE/.purple/logs/* $REPERTOIRE_DESTINATION/chat_logs 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
rsync -Parv --delete $REPERTOIRE_SOURCE/.mozilla/* $REPERTOIRE_DESTINATION/mozilla 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
#rsync -Parv --delete $REPERTOIRE_SOURCE/.thunderbird/* $REPERTOIRE_DESTINATION/thunderbird 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
rsync -Parv --delete $REPERTOIRE_SOURCE/VirtualBox\ VMs/* $REPERTOIRE_DESTINATION/VirtualBox\ VMs 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
rsync -Parv --delete /media/data/musique/* $REPERTOIRE_DESTINATION/musique 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
rsync -Parv /media/data/images/* $REPERTOIRE_DESTINATION/images 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
rsync -Parv $REPERTOIRE_SOURCE/documents/* $REPERTOIRE_DESTINATION/documents 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
#rsync -Parv /media/data/Dropbox/* $REPERTOIRE_DESTINATION/Dropbox 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
notify-send "Synchronisation dossiers essentiels achevée"

#notify-send "Backup du site du BDE"
#cp -av /opt/lampp/htdocs/ $REPERTOIRE_DESTINATION/backup_site_bde_$backup/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

#on lance un fdupes sur les images, la musique et les films
notify-send "Recherche des doublons images distants..."
#yes 1 | fdupes -rd $REPERTOIRE_DESTINATION/images   > /dev/null
notify-send "Recherche des doublons images achevée"
#notify-send "Recherche des doublons films..."
#yes 1 | fdupes -rd /media/BASE-1/ > /dev/null
#notify-send "Recherche des doublons films achevée"

notify-send "synchronisation du home..."
# On sauvegarde tout le home, sauf les dossiers ci-dessus
# Penser à de temps en temps lancer la commande suivante avec l'option --delete
rsync -Pav --delete --progress --exclude ".local/share/Trash/*" --exclude ".thumbnails/" --exclude "documents/" --exclude ".mozilla/" --exclude ".thunderbird/" --exclude "Desktop/" --exclude ".purple/" --exclude "VirtualBox VMs" --exclude "informatique/python/bibli/screens/" $REPERTOIRE_SOURCE  $REPERTOIRE_DESTINATION/home 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
notify-send "Synchronisation du /home achevée"

# On dresse la liste des films
ls -R $REPERTOIRE_DESTINATION/.. > $REPERTOIRE_DESTINATION/../liste.txt
notify-send "Liste des films générée"

#notify-send "Copie des documents dans Dropbox"
## On copie le bashrc dans Dropbox du home pour future synchronisation
#cp -v $REPERTOIRE_SOURCE/.bashrc $REPERTOIRE_SOURCE/Dropbox/Documents/scripts\ et\ autres/bashrc 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

## On copie tous les scripts du home dans Dropbox pour future synchronisation
#cp -v $REPERTOIRE_SOURCE/scripts_perso/* $REPERTOIRE_SOURCE/Dropbox/Documents/scripts\ et\ autres/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

## On synchronise le dossier conky dans Dropbox pour future synchronisation
#rsync -arv $REPERTOIRE_SOURCE/conky/ $REPERTOIRE_SOURCE/Dropbox/conky/ 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

## On copie toutes les lettres et tous les CV de Dropbox vers documents/
#cp -rv $REPERTOIRE_SOURCE/Dropbox/Documents/Latex/"CV et lettres" $REPERTOIRE_SOURCE/documents 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

# On copie la liste des sources et la liste des applications installées dans Dropbox pour future synchronisation
#cp -v /etc/apt/sources.list $REPERTOIRE_SOURCE/Dropbox/Documents/scripts\ et\ autres/sources.list  2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log
#dpkg --get-selections > $REPERTOIRE_SOURCE/Dropbox/Documents/scripts\ et\ autres/selections.txt 2>>  $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log

## 2>>> pour ajouter les erreurs à la fin d'un fichier, >> pr rediriger à la fin d'un fichier. > pour rediriger seulement dans un nouveau fichier


## Partie pour le comptage des médias
#find /run/media/djipey/BASE-1/ -type f -name "*avi" -and -not -path \*/.\* > $REPERTOIRE_SOURCE/temp.txt #trouve tous les fichiers avi et les liste
#find /run/media/djipey/BASE-1/ -type f -name "*mkv" -and -not -path \*/.\* >> $REPERTOIRE_SOURCE/temp.txt # trouve tous les fichiers mkv et les liste
#find /run/media/djipey/BASE-1/ -type f -name "*mp4" -and -not -path \*/.\* >> $REPERTOIRE_SOURCE/temp.txt # trouve tous les fichiers mkv et les liste
#wc -l temp.txt | cut -d "t" -f 1 > $REPERTOIRE_SOURCE/conky/nombre.txt #écrit le nombre de films dans nombre.txt
#ls $REPERTOIRE_DESTINATION/musique/ | wc -l >> $REPERTOIRE_SOURCE/conky/nombre.txt #trouve le nombre de musique et l'écrit dans nombre.txt
#find $REPERTOIRE_DESTINATION/images -type f  | wc -l >> $REPERTOIRE_SOURCE/conky/nombre.txt # trouve le nombre d'images et l'écrit dans nombre.txt
#rm $REPERTOIRE_SOURCE/temp.txt #supprime le fichier temporaire du comptage

##touch log_`date '+%d_%m_%Y'`
##sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com +la suite chiffres

notify-send "Sauvegarde terminée. Vérifiez les logs"
nohup gedit $REPERTOIRE_DESTINATION/log_errors_save_`date '+%d_%m_%Y'`.log > /dev/null
Est-ce qu'il y a moyen de faire poursuivre le script après les fdupes ?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [script bash] Pourquoi attend-il ?

Message par benjarobin »

Ton script est lancé via #!/bin/bash et non zsh, donc je crains que cela ne soit qu'une coïncidence.
C'est facile de vérifier si cela vient de fdupes, affiche un message avant : echo "..."
Et si c'est bien lui le coupable essaye la commande fdupes depuis ton terminal
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [script bash] Pourquoi attend-il ?

Message par tuxce »

sinon, lancer un script bash avec bash -x /le/dit/script te permettra de le suivre à la trace
Répondre