Bonsoir,

J'ai fait un petit script de sauvegarde en local, et j'aimerai que la fenêtre de la console ne s'ouvre que lorsqu'il y a un soucis:

Par exemple si le disque de sauvegarde n'est pas accessible etc...

J'ai rajouté la commande read à la fin du script. mais elle s'ouvre autant quand tout se passe bien que quand ça foire.


Voici le script - c'est mon premier soyez cool:-) -:
#!/bin/sh

echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y`.log
echo ::::::::::::: Debut de sauvegarde le `date +%A\ %d%m%y` à `date +%T` >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo .:`hostname` :. >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log


mkdir -p /media/disk/***/Documents/backup/`date +%d%m%y-%H%M%S`
rsync -avz --backup --backup-dir=/media/disk/***/Documents/backup/`date +%d%m%y-%H%M%S`/ /home/***/Documents/ /media/disk/***/Documents/ >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
/

echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo '' >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log
echo ::::::::::::: Fin de sauvegarde le `date +%A\ %d%m%y` à `date +%T` >> /home/***/.sauvegarde/`date +%A%d%m%y-%H%M%S`.log

read
Merci à tous.
Lorsqu'un shell fonctionne en avant plan, sa sortie standard et sa sortie d'erreur sont étroitement liées au terminal.
Le «read» que tu ajoutes en fin de traitement utilise l'entrée standard qui est aussi liée au terminal.

Attention à ta commande `date +%A%d%m%y-%H%M%S` qui entrainera plusieurs logs.
Il vaut peut-être mieux utiliser
log=/home/***/.sauvegarde/$(date +'%A%d%m%y-%H%M%S').log
pour avoir un nom de log unique pour toute l'exécution.
et
echo $date(date +'%A%d%m%y-%H%M%S') message >>$log


Si tu ne veux pas de fenêtre pour l'exécution il faut :
Lancer une commande en arrière plan dans une fenêtre que l'on pourra fermer par la suite (attention au hangup)
Utiliser un cron pour lancer le script.

Il reste à gérer l'ouverture d'une fenêtre en cas d'incident, mais ce n'est pas aussi simple que cela
Normalement un programme lancé en arrière plan peut revenir en avant plan, mais il faut que la fenêtre d'avant plan soit restée ouverte.
Un programme lancé en cron doit être autonome (il doit pouvoir s'exécuter même s'il n'y a pas dession graphique ouverte) et ne peut communiquer qu'avec des commandes plus complexes ou par le biais d'un log, de «mail», ...

Des produits comme «metamonitor» permettent de déclencher des popups si un log surveillé est modifié.
Merci pour ta réponse.
Attention à ta commande `date +%A%d%m%y-%H%M%S` qui entrainera plusieurs logs.
Il vaut peut-être mieux utiliser
log=/home/***/.sauvegarde/$(date +'%A%d%m%y-%H%M%S').log
pour avoir un nom de log unique pour toute l'exécution.
et
echo $date(date +'%A%d%m%y-%H%M%S') message >>$log
Ok, tu me conseilles d'utiliser des variables pour ce genre de scripts?
Remarque ça sera plus lisible...

Je vais regarder au niveau de metamonitor 🙂
Puisque que tu enchaînes plusieurs redirections de lignes (vides) vers ton fichier de log, la construction suivante peut être joliement efficace :
cat <<EOF >> $log
::::::::::::: Debut de sauvegarde le $(date +%A\ %d%m%y) à $(date +%T)


.: $(hostname) :.
EOF

mkdir [...]
Un détail ^^
Pour avoir une alerte en cas de problème en lancant un script avec crontab j'utilise zenity (gnome) ou xdialog (kde).
Zenity et xdialog sont des boîtes de dialogue depuis des scripts shell et la ligne de commande.
Il suffit de l'utiliser par ex (expliqué de manière grossière)

if
tous se passe bien
else
zenity et la config de la boite de dialogue

Dans la commande zenity tu peut spécifier un display et faire executer la commande pour un user avec su -c -l ton_user 'suivi de la commande' comme ca le boite de dialogue s'affichera.
Ok, merci à tous 🙂

@Pikachu_2014, ta soluce est sympa 🙂
Ca fait vraiment plus propre et moins encombrant dans le script...
Là je peux pas tester, mais je pense qu'on le peut multiplier ta commande non?


@franck1135, ok, je vais essayer, et prendre le temps de voir.

Et quand tu me proposes ta solution avec les conditions, c'est sur que ça me tente, et je vois déjà "l'algorithme".
C'est juste que la syntaxe me bloque pour le moment...