Erreur sur un tar
tom45
-
tom45 -
tom45 -
Bonjour
J'ai un problème dans un de mes scripts (qui fonctionne pour 10 PCs, mais pas avec un). Et je tourne en rond...
À l'intérieur j'ai une commande shell qui une fois interprétée donne :
Dans le script voici à quoi elle correspond :
Le truc, c'est que j'ai d'autre ligness à lancer après, notamment une copie vers un serveur, et si mon script déclenche ma fonction
Je ne comprends pas pourquoi sur ce PC, il déclenche une erreur en créant le tar alors que tout va bien sur mes autres PCs, et je ne sais pas trop par ou commencer .
Désolée je ne peux pas vous montrer l'intégralité de mon script ;(
J'ai un problème dans un de mes scripts (qui fonctionne pour 10 PCs, mais pas avec un). Et je tourne en rond...
À l'intérieur j'ai une commande shell qui une fois interprétée donne :
/usr/bin/ssh root@IP -p 22 tar --warning=no-file-changed -cf /tmp/monfichier.tar --directory=/mnt mondossier
Dans le script voici à quoi elle correspond :
${ssh} ${SSH_USER}@${IP_PC} -p ${SSH_PORT} "tar --warning=no-file-changed -cf /tmp/${BACKUPNAME}.tar --directory=${REMOTE_DIR} ${BACKUPNAME}" || error "Impossible de créer le backup"
- Si je lance la commande à la main le PC se connecte bien en ssh (avec une clé, pas de mot de passe), et cela me crée bien l'archive
.tar
. - Si je lance le script ça me lance la commande aussi (j'ai fait un
echo
de mes variables, elles sont bonnes) mais ça cela déclenche la fonctionerror
de mon script avec le message Impossible de créer le backup et ça finit mon script. L'archive.tar
s'est bien créée sur mon pc distant.
Le truc, c'est que j'ai d'autre ligness à lancer après, notamment une copie vers un serveur, et si mon script déclenche ma fonction
erroril interrompt le script.
Je ne comprends pas pourquoi sur ce PC, il déclenche une erreur en créant le tar alors que tout va bien sur mes autres PCs, et je ne sais pas trop par ou commencer .
Désolée je ne peux pas vous montrer l'intégralité de mon script ;(
16 réponses
-
hello
/mnt est bien monté ?
vérifier les droits de /tmp -
Sur ma machine 2 (pas celle qui lance le script ) j'ai :
le /tmp j'ai bien le tar qui se crée
il n'y a pas de montage entre le pc 1 (celui qui a le scripte) et le pc 2n
aprés la création du tar je lance un md5 puis une copie en scp mais il ne passe jamais a ces étapes il bloque sur le erreur -
si je prends un tar qui fonctionne sur un autre pc (pc 3) le tar est comme ça
-rw-r--r--. 1 root root 9103360 16 févr. 13:35 pc3.tar
sur le pc 2
-rw-r--r--. 1 root root 115568640 16 févr. 15:39 pc2.tar -
montre le message d'erreur exact
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
c'est là ou est le problème je n'en ai aucun il me fait bien ma ligne
${ssh} ${SSH_USER}@${IP_PC} -p ${SSH_PORT} "tar --warning=no-file-changed -cf /tmp/${BACKUPNAME}.tar --directory=${REMOTE_DIR} ${BACKUPNAME}" || error "Impossible de créer le backup"
j'ai bien le tar sur le pc 2
mais il arrete le script
ma fonction d'erreur est la suivante
#Fonction d'erreur, si une erreur il affichera un message d'erreur sous /var/log/messages
function error()
{
logger "${LOG} -> ${1}"
exit 1
} -
placer set -x avant le tar et capturer tout les messages avec > /tmp/log1 2>&1 à l'appel du script
-
avec la commande
${ssh} ${SSH_USER}@${IP_PC} -p ${SSH_PORT} "set -x tar --warning=no-file-changed -cf /tmp/${BACKUPNAME}.tar --directory=${REMOTE_DIR} ${BACKUPNAME}" > /tmp/log1 2>&1 || error "Impossible de créer le backup"
cela fonctionne il n'y a rien dans log 1
avec la commande
${ssh} ${SSH_USER}@${IP_PC} -p ${SSH_PORT} "tar --warning=no-file-changed -cf /tmp/${BACKUPNAME}.tar --directory=${REMOTE_DIR} ${BACKUPNAME}" || error "Impossible de créer le backup"
cela ne fonctionne pas
si je met le set -x tout au debut de mon script j'ai les lignes suivantes
+ echo /usr/bin/ssh root@ip -p 22 'tar --warning=no-file-changed -cf /tmp/pc2.tar --directory=/mnt pc2'
+ /usr/bin/ssh root@ip -p 22 'tar --warning=no-file-changed -cf /tmp/pc2.tar --directory=/mnt pc2'
+ error 'Impossible de créer le backup'
+ logger 'pc2* -> Impossible de créer le backup'
+ exit 1
-
-
les PCs ont-ils le même tar
tar --version
pour voir la valeur de retour${ssh} .... ${BACKUPNAME}" || {echo "tar return value $?"; error "Impossible de créer le backup" ; }-
tar --version
tar (GNU tar) 1.26
j'ai la même version sur mon pc 1 , pc2 et pc 3 du tar
je suis sur du centos 7
il y a une difference au niveau du kernel .
uname -mr
5.16.7-1.el7.elrepo.x86_64 x86_64 sur le pc qui ne marche pas (j'ai du faire une maj car je n'avais pas la carte réseau avec ce model de pc )
3.10.0-1160.49.1.el7.x86_64 x86_64 sur le pc avec le script mon serveur en faite c'est une machine virtuelle
3.10.0-1160.31.1.el7.x86_64 x86_64 sur un pc sur lequel cela fonctionne
-
-
est-ce que pc2.tar créé manuellement et pc2.tar créé par le script, donc avec erreur, sont identiques ?
-
via le script sans set -x sur la commande
-rw-r--r--. 1 root root 115568640 18 févr. 11:37 pc2.tar
si je met la même commande au début du script (set -x ) le tar ce créer mais il me sort en erreur
-rw-r--r--. 1 root root 115568640 18 févr. 11:47 pc2.tar
manuellement
-rw-r--r--. 1 root root 115568640 18 févr. 11:51 pc2.tar
via le script avec set - x dans la commande avant le tar .
${ssh} ${SSH_USER}@${IP_PC} -p ${SSH_PORT} "set -x tar --warning=no-file-changed -cf /tmp/${BACKUPNAME}.tar --directory=${REMOTE_DIR} ${BACKUPNAME}" > /tmp/log1 2>&1 || error "Impossible de créer le backup"
Bizarrement ce matin cela ne fonctionne plus, il ne me créer plus le tar.
enfin je pensait qu'il me créer le tar.
En faite le tar ne se supprime pas à chaque fois il se remplace..
Et là je pense qu'il ne se remplace pas.
Quand je relance la commande manuellement le tar se créer sous le deuxième pc, si je relance cette commande avec le set -x la le script va au bout mais a mon avis uniquement parce qu'il détecte le tar sous tmp qu'en pensez-vous ?
si je lance le script sans || error "Impossible de créer le backup" sur ma commande tout fonctionne bien ;( -
je viens de faire un test avec un nouveau répertoire sur le pc2 même droits avec 2 fichiers textes à l'intérieur
là tout fonctionne Nikel je pense que le problème viens de la création du tar soit il ne le fait pas correctement soit c'est trop gros . par contre pourquoi manuellement ça marche alors là ???
je ne sait pas comment voir les erreurs dessus pouvez vous m'aider svp -
mettre un ; après set-x
mettre la redirection à l'intérieur des "
le fichier log1 sera sur pc2${ssh} ${SSH_USER}@${IP_PC} -p ${SSH_PORT} "set -x; tar --warning=no-file-changed -cf /tmp/${BACKUPNAME}.tar --directory=${REMOTE_DIR} ${BACKUPNAME} > /tmp/log1 2>&1" || error "Impossible de créer le backup"
voir si il y a des erreurs systèmedmesg
-
-
j'ai fait d'autres tests :
avec le--warning=no-file-changed
ssh root@ip -p 22 'tar -cvf --warning=no-file-changed /root/tmp/pc2.tar --directory=/mnt test > tar_stdout.log 2> tar_stderr.log'
il n'y a pas d'erreurs dans tar_stderr.log'
sans le --warning=no-file-changed et que j'ajoute > tar_stdout.log 2> tar_stderr.logssh root@ip -p 22 'tar -cvf /root/tmp/pc2.tar --directory=/mnt test > tar_stdout.log 2> tar_stderr.log'
il y a des erreurs dans tar_stderr.log' fichiers modifiés pendant sa lecture
j'ai donc essayé de copier le dossier ailleurs pour éviter que quelqu'un ne les touches pendant le tar et là, mon script fonctionne.
en faite mon log erreur remonte les warning (je ne sait pas comment vu qu'ils ne sont pas dans le tar_stderr.log' ) et fait ressortir une erreur.
du coup je ne sait pas comment éviter ça, sachant que je dois copier impérativement les fichiers même si ils sont en cours d'exécution ??
je sèche ??
-
-
c'est un warning, donc tar continue
ca veut dire que les fichiers ont peut être été modifiés
mais ce n'est pas fatal -
si, le problème c'est que mon
|| error "Impossible de créer le backup"
à la fin de ma commande tar détecte les warning est il clos mon script.
il faut que je trouve un moyen de gérer les erreurs en gros si le tar plante ferme mon script et met moi un logger error et si c'est juste un warning va y passe mais alors comment c'est géré je séche -
récupérer la valeur de retour
ssh root@ip -p 22 'tar -cvf /root/tmp/pc2.tar --directory=/mnt test > tar_stdout.log 2> tar_stderr.log; echo $?>tar_error.log'
man tarRETURN VALUE
Tar exit code indicates whether it was able to successfully perform the requested operation, and if not, what kind of error occurred.
0 Successful termination.
1 Some files differ. ....
2 Fatal error. ....-
j'avoue ne pas trop comprendre ce que tu m'as noté.
Je suis désolé je n'ai pas un gros niveau en linux
ça marche si je fait ça (j'ai compris que echo$? interroge le résultat de la dernière commande )
ssh root@ip -p 22 'tar --warning=no-file-changed -cf /root/tmp/pc2.tar --directory=/mnt test
#test de réussite du tar si 0 ok si 1 des warning si 2 une erreur sur le tar
if [ $? == 2 ]
then
echo "erreur sur le tar" || error "Impossible de créer le backup"
else
echo "pas d'erreur sur le tar"
fi
-
-
c'est ce que j'allais proposer
on ne traite pas $?== 1 comme une erreur -
echo $? c'est juste pour voir la valeur
la man page d'une commande indique les différentes valeurs retournées
le if suffit puisqu'il est immédiat après la commande
si on a d'autres commandes à exécuter, on peut sauvegarder le retourcmd
reterr=$?
cmd2
if [ $reterr != 0 ] ...