Cron et ssh
Fermé
lonewolf
-
13 déc. 2007 à 16:06
[Dal] Messages postés 6062 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 24 mars 2023 - 14 déc. 2007 à 11:33
[Dal] Messages postés 6062 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 24 mars 2023 - 14 déc. 2007 à 11:33
A voir également:
- Cron et ssh
- Cron toutes les 5 minutes ✓ - Forum Shell
- Cron toutes les heures ✓ - Forum Shell
- Telecharger ssh - Télécharger - Divers Web & Internet
- Ssh bash ✓ - Forum Linux / Unix
- Z-cron - Télécharger - Optimisation
4 réponses
[Dal]
Messages postés
6062
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mars 2023
1 044
13 déc. 2007 à 16:23
13 déc. 2007 à 16:23
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
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
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
j'ai modifié également mon script :
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
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
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
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
[Dal]
Messages postés
6062
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mars 2023
1 044
14 déc. 2007 à 11:33
14 déc. 2007 à 11:33
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
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