Aller au contenu

Transferts De Fichiers Entre Deux Syno


Messages recommandés

  • Réponses 67
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Petit bilan :

Je ne passe pas par root

1) Transfert depuis mon DS109J vers le DS107 distant :

rsync -avz /volume1/Transfic/Test-fichier.JPG user@IP:/volume1/Transfic

user_IP's password:

Could not chdir to home directory /var/services/homes/user: No such file or directory

sending incremental file list

Test-fichier.JPG

sent 2380667 bytes received 31 bytes 29211.02 bytes/sec

total size is 2393407 speedup is 1.01

Le message d'anomalie à mon sens est du au serveur hôte car les utilisateurs sont définis dans etc/passwd comme suit :

/var/services/homes/user:/bin/csh

  • J'ai remplacé /bin/csh (interprêteur non dispo sur cette machine ?) par bin/sh
  • Le répertoire /var/services ne comporte pas homes ... pourquoi ?

Quelles conséquences de rester dans cette situation ?

2) Transfert depuis le DS107 distant vers mon DS109j :

Sur DS109j (serveur donc) J'ai remplacé dans le fichier etc/passwd pour l'utilisateur sbin/nologin par bin/ash

Transfert normalement effectué avec la même syntaxe mais avec adresse dyndns.

La suite :

Mise en place d'une solution nocturne ne requiérant pas l'entrée du mot de passe sur demande interactive.

Après avoir testé le paramètre --password-file=FICHIER ne passe pas il faut être en deamon ...???

j'espère avoir été clair .....

JP

Lien vers le commentaire
Partager sur d’autres sites

Petit bilan :

Je ne passe pas par root

1) Transfert depuis mon DS109J vers le DS107 distant :

Le message d'anomalie

Lien vers le commentaire
Partager sur d’autres sites

Pour lancer un script en tache de fond et reprendre la main sans le ctrl d rajoute un '&' a la fin de la commande

ex :


sh mon_script.sh &

Merci.

J'ai ajouté le & : je reprends bien la main mais le script ne se déroule pas, (sauf si CTL + d) alors j'ai ajouté un fichier log : vide ...

Si je déroule la commande top je vois bien sshd et top avec le user mais dès que j'entre q pour en sortir il me dit qu'il a arrêté mon script !!

Donc j'ai étudié un peu celà (je débute) :

Ce script est à l'emplacement /var/services/homes/user/bin,

Dans le etc/passwd le PATH user est bin/ash ( commande cat /etc/passwd | cut -d: -f1,7 | grep user)

Donc le fichier script devrait commencer par #!/bin/ash.

Enfin la commande : sh chemin_de_l'exécutable me permet de dérouler le script avec CTL+d, avec le & à la suite je ne peux qu'interrompre quelque chose qui ne démarre pas ...

Qu'attend-t-il ?

Ou est l'erreur ?

PS :avec #!/bin/sh en début de script c'est pareil ...

JP

Lien vers le commentaire
Partager sur d’autres sites

Si ton script ne te rend la man qu'après un ctrl-d, ça veut dire qu'il attend une entrée de données de l'entrée standard (le clavier).

Donne le contenu de ton script si tu veux plus d'infos,

Test par script

Contenu du script :

#!/bin/ash

# ============================================

#

tx1=`grep -i "Bytes transmis" $fic_net | awk '{print $3}'`

DATEDeb=$(date +%d-%m-%Y" "%Hh%M)

# Transfert du repertoire

rsync -avz /volume1/Transfic/ userdistant@adresseIP/volume1/jp/Transfic

# ecriture du fichier log

DATEFin=$(date +%d-%m-%Y" "%Hh%M)

tx2=`grep -i "Bytes transmis" $fic_net | awk '{print $3}'`

TX=`echo $tx1 | awk '{ print '$tx2' - $1}'`

echo "Debut de la sauvegarde : $DATEDeb - Terminee : $DATEFin - Octets Transmis : $TX" >> /volume1/Transfic/transfic${DATEFin}.log

C'est celui indiqué dans ce fil, il n'a pas grande importance en soi, simplement il donne les heures de début, de fin.

Il m' a interpelé dans la mesure ou il permet de savoir si la procédure s'est déroulée jusqu'au bout, et puis c'est un exercice ..

J'ai d'ailleurs une question : comment se rend-t-on compte s'il y a eu un incident ? En cas d'incident la reprise je suppose doit se faire.

J'ai regardé les nombreuses options de rsync ...

J'ai hésité d'utiliser le paramètre qui donne la possibilité de mettre le fichier en cours de transmission dans un répertoire temp.

Si je neutralise les lignes tx1 et tx2 celà fonctionne..pourtant dans un autre topic la recherche de zones de fic_net est abordée ..

Autre test :

Si je mets le fichier crontab comme suit :

#minute hour mday month wday who command

10 0 * * * user rsync -avz /volume1/Transfic/ userdistant@adresseIP/volume1/jp/Transfic > /volume1/Transfic/logcron.log

Celà crée le fichier log à vide mais rien ne se passe ... j'ai regardé dans ce forum la procédure d'arrêt/relance de crontab (S04crond.sh stop/start)

alors que manuellement c'est bon !

JP

Lien vers le commentaire
Partager sur d’autres sites

Test par script

Contenu du script :

#!/bin/ash

# ============================================

#

tx1=`grep -i "Bytes transmis" $fic_net | awk '{print $3}'`

DATEDeb=$(date +%d-%m-%Y" "%Hh%M)

# Transfert du repertoire

rsync -avz /volume1/Transfic/ userdistant@adresseIP/volume1/jp/Transfic

# ecriture du fichier log

DATEFin=$(date +%d-%m-%Y" "%Hh%M)

tx2=`grep -i "Bytes transmis" $fic_net | awk '{print $3}'`

TX=`echo $tx1 | awk '{ print '$tx2' - $1}'`

echo "Debut de la sauvegarde : $DATEDeb - Terminee : $DATEFin - Octets Transmis : $TX" >> /volume1/Transfic/transfic${DATEFin}.log

ta variable $fic_net correspond

Lien vers le commentaire
Partager sur d’autres sites

Le but de ce script selon son auteur devait être d'aller chercher le volume d'octets transmis,

pour que celà fonctionne j'ai initialisé la variable FIC_NET à '/proc/net/sk98lin/eth0', fichier statistique de la carte coupleur.

Le coupleur récupérant tout ce n'est surement pas bon, je doute qu'il y ait ce genre de stats pour un script déterminé ?

Enfin dans le principe celà permet au script de fonctionner, je verrais plus tard.

#!/bin/ash

# ============================================

#

FIC_NET="/proc/net/sk98lin/eth0"

tx1=`grep "Transmitted bytes" $FIC_NET | awk '{print $3}'`

DATEDeb=$(date +%d-%m-%Y" "%Hh%M)

# Transfert du repertoire

rsync -avz /volume1/Transfic/ user@IP:/volume1/jp/Transfic > /volume1/Transfic/Transfic${DATEDeb}.log

# ecriture du fichier log

DATEFin=$(date +%d-%m-%Y" "%Hh%M)

tx2=`grep "Transmitted bytes" $FIC_NET | awk '{print $3}'`

TX=`echo $tx1 | awk '{print '$tx2' - $tx1}'

`echo "Debut de la sauvegarde : $DATEDeb - Terminee : $DATEFin - Octets Transmis : $TX" > /volume1/Transfic/Transfic2${DATEDeb}.log

Mon but :

- Comment avoir les heures de début, de fin sur un log ?

peux-tu préciser ta question ?

si c'est juste écrire les dates de début et de fin dans le log, tu peux faire :

DATEDeb=$(date +%d-%m-%Y" "%Hh%M)

echo $DATEDeb >/volume1/Transfic/fichierlog.log

ta commande rsync ici >>/volume1/Transfic/fichierlog.log

DATEFin=$(date +%d-%m-%Y" "%Hh%M)

echo $DATEFin >>/volume1/Transfic/fichierlog.log

Situation:

En lancement manuel la procédure sh Transfic.ash lancée à partir du répertoire /var/services/homes/user/bin (de même qu'à partir du rep racine en spécifiant le chemin complet) fonctionne, les logs sont remplis.

Si je mets le fichier crontab comme suit :

#minute hour mday month wday who command

10 0 * * * user sh /var/services/homes/user/bin/Transfic.ash

elle se déclenche mais il n'y a pas de transfert car les fichiers logs sont générés : celui de rsync est vide, l'autre a ses compteurs à zéro.

Je m'en rend compte car dans les noms de fichiers il y a date et heure.

JP

es-tu bien sûr que user a les droits pour lancer ce script ?

as-tu bien mis le >> pour ajouter au fichier de log (> crée un nouveau fichier, donc seule la première ligne d'écriture dans le log dont avoir >, les autres doivent avoir >>)

Lien vers le commentaire
Partager sur d’autres sites

Ok le sript a évolué dans ce sens, de plus j'ai ajouté la sortie du code retour.

#!/bin/ash

# ============================================

#

DATEDeb=$(date +%d-%m-%Y" "%Hh%M)

echo $DATEDeb > /volume1/Transfic/Transfic.log

# Transfert du repertoire

rsync -avz /volume1/Transfic/ user@adresseip:/volume1/jp/Transfic >>/volume1/Transfic/Transfic.log

# tests codes retour

status=$?

if [ $status -ne 0 ]

then echo 'code retour = ' $status >>/volume1/Transfic/Transfic.log

else echo 'Transferts reussis' >>/volume1/Transfic/Transfic.log

fi

# ecriture du fichier log

DATEFin=$(date +%d-%m-%Y" "%Hh%M)

echo $DATEFin >>/volume1/Transfic/Transfic.log

Lien vers le commentaire
Partager sur d’autres sites

Je récapitule :

Sous utilisateur autre que root le script fonctionne en lancement manuel sous PuTTY, code retour 0.

par contre si j'entre son appel dans etc/crontab toujours pour cet utilisateur autre que root la procédure se lance et j'ai un code retour à 255, le log est créé à vide

Question :

Que faut-il faire pour qu'un utilisateur autre que root soit autorisé à utiliser crontab ?

Enfin : pourquoi etc/crontab est-il vide le lendemain (je précise avoir éteint le serveur entre temps)

Bonjour,

Il serait souhaitable d'utiliser le compte root pour exécuter ton script, cela t'éviderait pas mal de problème.

Notamment le problème avec les variables d'environnement ou les droits.

  • Dans ce sens, utilise 'rsync' avec son chemin. Je ne sais plus ou il est exactement.
    Et comme je n'ai pas accès a mon SYNO :)
    Tu peux le retrouver avec la commande :

    which rsync

Utilise donc ce chemin renvoyé :

/chemin/rsync -avz /volume1/Transfic/ .........etc 

  • Ensuite, si ta commande disparait du fichier 'crontab' après un reboot, c'est qu'il y a un erreur de syntaxe.
    Utilise bien des tabulations entre les champs, et non des espaces.

Voila, dernière remarque, tu compresses cette sauvegarde avec le paramètre 'z', Je ne pense pas que ce soit bien nécessaire. En tout cas, tu obtiendrais de meilleur performance sans cette option.

A+

Fred.

Lien vers le commentaire
Partager sur d’autres sites

Le chemin de rsync est :

usr/syno/bin/

Je l'ai ajouté devant rsync dans le script : sans effet, j'ai un code retour de rsync à 255 ? De ce que j'ai pu voir ce n'est pas une valeur attendue .. de rsync !

J'en suis toujours au fait qu'en lançant manuellement le script à partir du répertoire /var/services/homes/user/bin c'est OK.smile.gif

Mais avec crontab :

#minute hour mday month wday who command

55 0 * * * user sh /var/services/homes/noisy/bin/Transfic.sh

les fichiers logs sont créés comme contenu les variables du script mais pas le 'journal' rsync et j'ai ce code retour .... donc ce script est bien appelé et deroule quelque chose,pourquoi ne pas vouloir de rsync ?

De plus je crois que ma syntaxe est bonne puisque crontab fait quelque chose, non ?huh.gif

Je crois effectivement qu'il y a des soucis de path dès lors que l'on veut travailler avec crontab + user autre que root. ... comment les traquer ?unsure.gif

second test :

J'ai spécifié root dans crontab : même punition ...sad.gif

J'ai ajouté un journal Cron.log dans crontab : il est généré à vide ...

Lancement manuel à partir de root : le mot de passe est demandé, celà me parait normal car on sort de l'environnement double clef de l'utilisateur,

or le but est de transmettre la nuit....

Troisième test :

J'ai recopié le script dans usr/bin, répertoire de mise à dispo des scripts utilisateurs qui je crois n'est pas affecté par une mise à niveau système (ex : DMS 2.2) .... et bien entendu modifié crontab :

#minute hour mday month wday who command

47 9 * * * user sh /usr/bin/Transfic.sh > Cron.log

Le journal Transfic.log du script est généré mais sans le code retour de rsync ...il ne doit pas pouvoir l'exécuter ?

alors qu'en lancement manuel en session user : sh /usr/bin/Transfic.sh à partir de la racine c'est tout bon ..

en session root il me demande le mot de passe (normal)

Question : comment définir un environnement dans crontab ?

JP

Lien vers le commentaire
Partager sur d’autres sites

attention ! c'est /usr/syno/bin/

C'est la cas (faute de frappe) désolé.

crontab lance ses commandes dans son propre environnement !

C'est bien là le problème.

Au sujet du code 255 j'ai pu lire :

"Actually, the 255 is the complement of -1, which is the UNIX return code you get when some library you are trying to load cannot be found. "

Question qui peut paraitre élémentaire : faut-il un fichier crontab par utilisateur ?

celà existe a priori pour des système UNIX mais sur les synos ?

Si oui comment la créer et la gérer par rapport à son utilisateur propriétaire ?

A mettre dans /var/services/homes/user ?

JP

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • 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.