Pages : 1
#1 Le 16/02/2016, à 13:26
- DKdlV
cron et script rsync ne fonctionnent pas ensemble
Bonjour à tous
Je viens vous voir car je galère un peu dans la configuration d'un serveur de synchro avec rsync utilisé dans cron.
J'ai configuré keychain pour ne pas avoir à donner systématiquement de mot de passe pour les connexions et ça fonctionne.
J'ai fait un script qui me lance une synchronisation qui fonctionne quand il est lancé manuellement mais qui ne fonctionne pas ajouté dans la crontab avec
crontab -e
.
crontab :
# m h dom mon dow command
*/1 * * * * sh /home/user/scriptrsync.sh
Dans le script, j'ai rajouté des petits indicateurs pour savoir ou se situe mon soucis, et je pense avoir avancé, mais je ne sais pas quoi en faire : j'ai rajouté 2 lignes, une avec
whoami
qui me revient avec le nom d'utilisateur que je veux et une avec
echo $USER
qui me revient vide une fois lancée par crontab, mais avec le bon nom d'utilisateur si je la lance à la main...
script :
#!/bin/sh
date >> ~/diagcron.log
echo $USER >> ~/diagcron.log
date >> ~/diagcron.log
whoami >> ~/diagcron.log
date >> ~/diagcron.log
id >> ~/diagcron.log
rsync -e "ssh -p #####" -avz --stats --delete /media/chemin/source/ user@###.###.###.###:/media/chemin/cible/ >> ~/diagcron.log
date >> ~/diagcron.log
résultat du log pour le script lancé à la main:
mardi 16 février 2016, 13:44:26 (UTC+0100)
user
mardi 16 février 2016, 13:44:26 (UTC+0100)
user
uid=1000(user) gid=1000(user) groupes=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),111(sambashare)
sending incremental file list
./
configcron
diagcron.log
scriptrsync.sh
Number of files: 49 (reg: 42, dir: 7)
Number of created files: 3 (reg: 3)
Number of deleted files: 0
Number of regular files transferred: 3
Total file size: 958,944,954 bytes
Total transferred file size: 2,216 bytes
Literal data: 2,216 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.010 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 3,016
Total bytes received: 89
sent 3,016 bytes received 89 bytes 1,242.00 bytes/sec
total size is 958,944,954 speedup is 308,838.95
mardi 16 février 2016, 13:44:29 (UTC+0100)
résultat du log lancé avec cron:
mardi 16 février 2016, 13:44:01 (UTC+0100)
mardi 16 février 2016, 13:44:01 (UTC+0100)
user
uid=1000(user) gid=1000(user) groupes=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),111(sambashare)
mardi 16 février 2016, 13:44:02 (UTC+0100)
En gros, la commande rsync du script ne semble carrément pas se lancer dans la crontab...
Si vous avez des idées de choses à vérifier, je suis preneur.
Merci d'avance à tous pour votre aide.
Dernière modification par DKdlV (Le 19/02/2016, à 10:23)
Hors ligne
#2 Le 17/02/2016, à 08:44
- bruno
Re : cron et script rsync ne fonctionnent pas ensemble
Bonjour,
La variable d'environnement USER est vide lorsque l'on est pas dans un shell de connexion interactif. Une tâche cron est exécutée comme shell non interactif et non connecté (non login shell).
Dans ton crontab aussi bien que dans ton script tu devrais préciser les emplacements complet des exécutables :
*/1 * * * * /bin/bash /home/krys/scriptrsync.sh
/usr/bin/rsync - e 'ssh…
Pour la raison invoquée plus haut (non login, non interactiv sheel dans le cas de cron) la variable d'environnement PATH n'est pas forcément connue.
#3 Le 17/02/2016, à 14:45
- HPIR40
Re : cron et script rsync ne fonctionnent pas ensemble
Bonjour
Pour lancer une synchro avec rsync en ssh il faut au paravent paramétrer une connexion au serveur distant sans mot de passe, voir les doc ssh-keygen
Ensuite quand tu peux te connecter sur ton serveur distant via la commande ssh user@###.###.###.### sans entrer de mot de passe, cela devrait rouler tout seul
Si ça ne passe toujours pas, change les droits d'accès de ton script (755 ou 777)
C'est la méthode la plus directe que je connaisse.
Hors ligne
#4 Le 19/02/2016, à 10:38
- DKdlV
Re : cron et script rsync ne fonctionnent pas ensemble
Merci pour vos réponses.
Avec les adresses complètes, il n'y a pas de changement, ni en modifiant les droits d'accès au script.
J'ai déjà un agent qui permet à mes utilisateurs user et root de se connecter sans mot de passe, mais lancé dans CRON, le script se lance (puisque j'ai les infos que je lui demande quant à la date et aux tests sur les noms d'utilisateurs) mais la partie rsync ne renvoie rien, comme si elle ne se lançait pas.
le log d'authentification sur le serveur me donne ça :
Feb 19 10:31:01 serveur CRON[24067]: pam_unix(cron:session): session opened for user root by (uid=0)
Feb 19 10:31:01 serveur CRON[24068]: pam_unix(cron:session): session opened for user user by (uid=0)
Feb 19 10:31:01 serveur CRON[24068]: pam_unix(cron:session): session closed for user user
Feb 19 10:31:01 serveur CRON[24067]: pam_unix(cron:session): session closed for user root
Feb 19 10:31:02 serveur sshd[24073]: Failed password for user from "ipduclient" port 53550 ssh2
Feb 19 10:31:02 serveur sshd[24073]: Failed password for user from "ipduclient" port 53550 ssh2
Feb 19 10:31:02 serveur sshd[24073]: Connection closed by "ipduclient" [preauth]
Des idées ?
Dernière modification par DKdlV (Le 19/02/2016, à 10:39)
Hors ligne
#5 Le 19/02/2016, à 13:16
- bruno
Re : cron et script rsync ne fonctionnent pas ensemble
J'ai déjà un agent qui permet à mes utilisateurs user et root de se connecter sans mot de passe
Ce n'est pas suffisant. Il faut que les utilisateurs puissent se connecter avec leur clés (voir la réponse de HPIR40), ton « agent » qui fournit automatiquement le mot de passe ne fonctionnera pas avec une tâche cron. D'ailleurs tu as bien une erreur d'authentification dans tes logs.
#6 Le 19/02/2016, à 13:28
- DKdlV
Re : cron et script rsync ne fonctionnent pas ensemble
J'ai trouvé une réponse ici : http://stackoverflow.com/questions/2205 … se-to-meet
Je ne comprends pas ce que cela fait, je comprends par contre que c'est une béquille puisque je vais récupérer une valeur dans le dossier temp, mais j'avance car mon script se lance :
I had a similar problem. My script (that relied upon ssh keys) worked when I ran it manually but failed when run with crontab.
Manually defining the appropriate key with
ssh -i /path/to/key
didn't work.
But eventually I found out that the SSH_AUTH_SOCK was empty when the crontab was running SSH. I wasn't exactly sure why, but I just
env | grep SSH
copied the returned value and added this definition to the head of my crontab.
SSH_AUTH_SOCK="/tmp/value-you-get-from-above-command"
I'm out of depth as to what's happening here, but it fixed my problem. The crontab runs smoothly now.
Si je prends le man de ssh, j'ai ça :
SSH_AUTH_SOCK
Identifie le chemin de la socket unix-domain utilisée pour communiquer avec l'agent.
Et j'avoue que ça ne me dit pas comment résoudre proprement mon problème.
Dernière modification par DKdlV (Le 19/02/2016, à 13:34)
Hors ligne
#7 Le 19/02/2016, à 15:55
- bruno
Re : cron et script rsync ne fonctionnent pas ensemble
Désolé ma réponse n'était pas complète. si tu veux que cela fonctionne sans prise de tête, il faut que tes utilisateurs s'identifient avec une clé privée (la clé publique étant copiée sur le serveur) sans phrase de passe (laisser le mot de passe vide au moment de la génération de la clé).
#8 Le 19/02/2016, à 17:31
- bobe
Re : cron et script rsync ne fonctionnent pas ensemble
Il vaut mieux créer une clé utilisable sans phrase de passe, mais qui ne puisse exécuter qu'une commande précise sur le serveur cible.
Dernière modification par bobe (Le 19/02/2016, à 17:33)
Hors ligne
Pages : 1