Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/02/2014, à 18:23

DCUPLE

find + rsync + ssh dans crontab [RÉSOLU]

Bonjour,

J'ai une petite commande que je souhaite automatiser avec cron, cela fonctionne parfaitement dans un terminal, une fois dans cron elle ne se lance plus. La même commande sans ssh fonctionne dans cron.

/usr/bin/find '/home/user/repertoire' -name 'FA*.pdf' -type f -mmin -60 -execdir rsync -e ssh -az --progress {} 'toto@81.XX.XX.XXX:Bureau' \;

Merci pour votre aide !

Dernière modification par DCUPLE (Le 25/02/2014, à 14:29)


L'Entraide, un facteur de l'évolution. MERCI

Hors ligne

#2 Le 18/02/2014, à 23:58

yamo

Re : find + rsync + ssh dans crontab [RÉSOLU]

As tu essayé d'écrire ça dans un script et de mettre le script dans le cron?

Avec cron, on perd les variables d'environnement peut-être faut-il rajouter en début de script  :
. /home/user/.bashrc

L'espace entre le point et / est à respecter, cf http://www.c-sait.net/cours/bash.php


Stéphane
--
Debian 9 XFCE  Xubuntu 16.04.2  - #ubuntu sur freenode

sudo / matrix

Hors ligne

#3 Le 19/02/2014, à 14:47

DMWeb

Re : find + rsync + ssh dans crontab [RÉSOLU]

As-tu éventuellement des traces d'erreurs lors de l'exécution de ton tâche cron ? ça pourrait peut être aider


"Currently using Ubuntu 12.04 LTS"
Au sein de l'entreprise DMWeb, on utilise Ubuntu sur les machines de travail

Hors ligne

#4 Le 19/02/2014, à 19:22

DCUPLE

Re : find + rsync + ssh dans crontab [RÉSOLU]

Oui, j'avais mis ça dans un script bash

et j'ai rajouté . /home/user/.bashrc

. /home/user/.bashrc
#/bin/bash!

find '/chemin/vers/source' -name 'FA*.pdf' -type f -execdir sudo rsync -az {} '/chemin/vers/destination' \;

find '/chemin/vers/source' -name 'FA*.pdf' -type f -mmin -60 -execdir rsync -e ssh -az --progress {} 'user@81.XX.XX.XXX:/home/user/destination'

Comme ça, dans cron, le premier marche et pas le deuxième.

Dans cron, chaque heure :

0 */1 * * * bash /chemin/vers/script mon_script.sh > /chemin/vers/fichier.log

mais rien n'apparaît dans le fichier.log   neutral


L'Entraide, un facteur de l'évolution. MERCI

Hors ligne

#5 Le 19/02/2014, à 20:36

Postmortem

Re : find + rsync + ssh dans crontab [RÉSOLU]

Salut,
Pour le script, déjà, ça serait mieux ainsi :

#!/bin/bash
. /home/user/.bashrc

find '/chemin/vers/source' -name 'FA*.pdf' -type f -execdir sudo rsync -az {} '/chemin/vers/destination' \;

find '/chemin/vers/source' -name 'FA*.pdf' -type f -mmin -60 -execdir rsync -e ssh -az --progress {} 'user@81.XX.XX.XXX:/home/user/destination'

On met toujours le #!/bin/bash seul sur la première ligne sinon, il ne sert à rien.
Puis rends le script exécutable en faisant :

chmod +x /chemin/vers/script/mon_script.sh

Ensuite, dans ton cron, tu l'appelles ainsi :

0 */1 * * * /chemin/vers/script/mon_script.sh > /chemin/vers/fichier.log 2>&1

Ensuite, jette un œil dans le fichier log pour voir s'il y a quelque chose.

Édit :
Ah oui, et comment mets tu cron à jour ? Avec crontab -e ou sudo crontab -e ?

Dernière modification par Postmortem (Le 19/02/2014, à 20:39)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 19/02/2014, à 22:47

DCUPLE

Re : find + rsync + ssh dans crontab [RÉSOLU]

Édit :
Ah oui, et comment mets tu cron à jour ? Avec crontab -e ou sudo crontab -e ?

Dans la première ligne de commande,
comme les fichiers source sont dans un répertoire qui nécessite les droits root, j'ai mis le script dans sudo crontab -e
et donc ça fonctionné.

Le script était bien exécutable.

Pour la deuxième commande qui bloque :
Le fichier log m'indique un problème de droit, permission refusée.
Cela ne fonctionne pas avec rsync -e ssh exécutée dans sudo crontab -e
Grâce à vous, j'arrive à quelque chose en changeant les droits avant la deuxième commande et en utilisant cette fois crontab -e ; ça ne donne rien avec sudo crontab -e ; pourquoi ?

quelque chose comme ça :

#!/bin/bash

chmod -R 777 /repertoire-en-question

find '/chemin/vers/source' -name 'FA*.pdf' -type f -mmin -60 -execdir rsync -e ssh -az --progress {} 'user@81.XX.XX.XXX:/home/user/destination'

Je dois donc jongler entre les deux crontab ; pas très pratique, il y a sûrement plus propre.

À priori, pas de soucis concernant les variables d'environnement, donc je garde . /home/user/.bashrc sous le coude wink

MERCI, je vais passer en résolu.

Dernière modification par DCUPLE (Le 19/02/2014, à 22:50)


L'Entraide, un facteur de l'évolution. MERCI

Hors ligne

#7 Le 20/02/2014, à 01:32

Postmortem

Re : find + rsync + ssh dans crontab [RÉSOLU]

D'après ton premier message, tu lances ta commandes ainsi :

/usr/bin/find '/home/user/repertoire' -name 'FA*.pdf' -type f -mmin -60 -execdir rsync -e ssh -az --progress {} 'toto@81.XX.XX.XXX:Bureau' \;

C'est bien ça ?
Si c'est le cas, tu la lances en tant que simple utilisateur, ça me paraissait donc logique d'utiliser la crontab de cet utilisateur via crontab -e.

Mais d'après ce que tu dis dans ton dernier message, il te faut les droits root ??? Si c'est le cas, la commande que je viens de citer ne devait pas non plus fonctionner telle que lancée depuis le Terminal ?? (sauf maintenant si tu as changé les droits ! )

Si il te faut les droits root, il faut alors bien mettre la commande dans la crontab de root, via sudo crontab -e.
Et le problème avec ssh ne viendrait-il pas du fait que tu n'aies pas de couple clé publique/privée pour la connexion à partir de root alors que tu as bien ça pour ton simple utilisateur ?


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 20/02/2014, à 02:02

DCUPLE

Re : find + rsync + ssh dans crontab [RÉSOLU]

Une fois de plus, je crois que tu es pile dessus ! Je n'ai pas de couple clé publique/privée pour la connexion à partir de root mais pour chaque user.

Edit :
Effectivement, un couple de clé dans le dossier root règle la question. Les deux commandes sont acceptées dans sudo crontab - e, maintenant. La première récupère un type de fichier dans des sous-répertoires avec les droits Apache et en fait une copie dans un dossier du home. La deuxième envoie ces mêmes fichiers avec find+rsync+ssh. Ça marche bien. MERCI

Dernière modification par DCUPLE (Le 25/02/2014, à 14:28)


L'Entraide, un facteur de l'évolution. MERCI

Hors ligne