Cron et ssh

lonewolf -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un petit souci.

j'ai crée un script qui va vérifier a distance et par ssh si mon serveur samba est en fonctionnement.

Le script fonctionne, y a pas de souci

Par contre, dès que je le place dans le cron, cela ne fonctionne plus.

Je m'explique : j'ai une commande ssh et un || si cela ne fonctionne pas envoi moi un mail.

Lorsque j'execute le script, pas de souci, il m'envoi un mail que lorsque j'ai fait tomber le pc distant.

Mais par cron, il m'envoie toujours un mail car a priori, il ne prend pas en compte le ssh

Est ce qu'il y a une solution pour bypasser ce problème ??

Merci d'avance

Lonewolf
A voir également:

4 réponses

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106
 
Salut,

Les commandes de ton script doivent être accessibles dans l'environnement dans lequel s'exécute CRON, qui n'a surement pas la même variable de PATH.

Modifie ton script en lançant les commandes qu'il contient précédées de leurs chemins absolus et vois si cela améliore les choses.

Par exemple, sur une Debian le chemin absolu de "ssh" (et sur d'autres Linux en général) est "/usr/bin/ssh".

Pour vérifier le chemin d'une commande utilise la commande "which"

Fait cela pour toutes les commandes de ton script, y compris celles que tu mets dans la Crontab.

Dal
0
lonewolf
 
Bonjour et merci a toi,

Alors voila ce que j'ai fait :

J'ai modifié ma commande dans le cron en y mettant le chemin de la commande

*/5 * * * * /bin/sh /home/rsi/Desktop/script.sh


j'ai modifié également mon script :

#!/bin/bash
(/usr/bin/ssh root@CPD1 "service smb status>status.txt")||mail -s ErrorCpd1 toto@titi.fr << EOF
CPD1 Draf43 Tombé
EOF
/usr/bin/ssh root@CPD1 "scp status.txt root@linux:/home/rsi/Desktop/"
/usr/bin/ssh root@CPD1 "rm -f status.txt"
/usr/bin/ssh root@CPD1 "exit"
export foo=`cat /home/rsi/Desktop/status.txt|head -1|awk '{ print $NF }'`
if [ $foo = "arrêté" ]; then service smb start; fi
if [ $foo = "d'exécution..." ]; then service smb stop; fi
rm -f /home/rsi/Desktop/status.txt
*

Mais ca coince. Ca ne fonctionne pas mais je n'ai pas de messages d'erreur dans mes logs.

Je suis donc un peu perdu

Merci de votre aide

lonewolf
0
Manu
 
Bonjour,

Il faudrait vérifier si le cron arrive à prendre les clés ssh dans le bon répertoire. A priori cron force l'environnement $HOME, mais je ne suis pas sûr que ça suffise au plan des protections de fichier.

Je ferais des "ls -lu" avant et après l'exécution par cron, d'une part sur l'exécutable ssh (pour voir si ssh a été lancé), et d'autre part sur le répertoire $HOME/.ssh et les fichiers de clé (pour savoir s'ils ont été lus).

Manu
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106
 
Salut lonewolf,

1.

*/5 * * * * /bin/sh /home/rsi/Desktop/script.sh

"/bin/sh" me semble être inutile.. non ?

Pour rediriger stdout et stderr vers un endroit précis, tu peux faire cela :

*/5 * * * * /home/rsi/Desktop/script.sh > /home/lonewolf/testcrontab.txt 2>&1

j'ai modifié également mon script :

#!/bin/bash
(/usr/bin/ssh root@CPD1 "service smb status>status.txt")||mail -s ErrorCpd1 toto@titi.fr << EOF


Il manque le chemin absolu de "mail"

CPD1 Draf43 Tombé
EOF
/usr/bin/ssh root@CPD1 "scp status.txt root@linux:/home/rsi/Desktop/"
/usr/bin/ssh root@CPD1 "rm -f status.txt"
/usr/bin/ssh root@CPD1 "exit"


Le "exit" n'est pas utile car ssh fait déjà un "exit" à la fin de chaque ligne de commande.

export foo=`cat /home/rsi/Desktop/status.txt|head -1|awk '{ print $NF }'`

Mettre le chemin absolu des commandes ci-dessus est plus prudent.

if [ $foo = "arrêté" ]; then service smb start; fi
if [ $foo = "d'exécution..." ]; then service smb stop; fi


Je ne comprend pas cette partie. La commande "service" ne devrait-elle pas être exécutée sur la machine "CPD1" avec une commande ssh ? Si c'est vraiment un exécution locale, il est préférable de préfixer du chemin absolu.

rm -f /home/rsi/Desktop/status.txt

*


C'est pour quoi l'étoile ?

2.

Les commandes ssh ne fonctionneront que si "root" n'a pas de mot de passe sur "CPD1" (ce qui n'est pas recommandé), ou si tu as installé un couple de certificats sur "/root /.ssh" sur "CPD1" et dans le "$HOME/.ssh/" de l'utilisateur qui lance la tâche cron.

Fait les vérifications proposées par Manu si tu es dans ce 2ème cas.

Il faudra aussi, bien sûr, que la crontab que tu lances soit effectivement celle de l'utilisateur pouvant utiliser la paire de clés, et donc que tu aies mis ta ligne de crontab dans l'éditeur qui se lance après avoir saisi "crontab -e" en ligne de commande sous l'utilisateur concerné.

Dal
0