#1 Le 01/09/2011, à 22:48
- ludovic815
[Résolu] Crontab : scripts sh qui ne fonctionnent pas...
Bonjour,
Je suis sous Ubuntu serveur 10.04 lts et j'ai des soucis avec certains scripts que j'essaie de faire fonctionner avec crontab.
Déja, en les executant "normalement" via la console, ils fonctionnent très bien, mais j'ai l'impression que tous les scripts qui accedent à un fichier sur mon pc en lecture ne fonctionnent pas lorsqu'ils sont executés par crontab.
Voici mes scripts (je remplace mes informations d'identification par XXXXX et YYYYY :
/home/ludovic/meteo/meteo.sh (celui-ci est fonctionnel avec crontab executé toutes les minutes):
#!/bin/sh
#Récupération des données actuelles de la station :
/home/ludovic/meteo/fetch3600 > /home/ludovic/meteo/donnees/actuel.txt
ncftpput -u XXXXXXXX -p XXXXXX XXXX.YYYY.fr /donnees/ /home/ludovic/meteo/donnees/actuel.txt
/home/ludovic/meteo/historique_journalier.sh (celui ci fonctionne aussi et est executé toutes les 15 minutes par crontab ...)
#!/bin/bash
#Récupération des données actuelles de la station :
/home/ludovic/meteo/fetch3600 | egrep -i -w "Date|Time|To|DP|RHo|WS|DIR0|WC|RP" >> /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt
echo "" >> /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt
ncftpput -u XXXXXXXX -p XXXXXX XXXX.YYYY.fr /donnees/ /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt
Reprenons le script précédent et modifions quelques petits trucs ... (et la ça ne fonctionne plus avec crontab ...)
#!/bin/bash
#Récupération des données actuelles du fichier généré par le script meteo.sh :
cat /home/ludovic/meteo/donnees/actuel.txt | egrep -i -w "Date|Time|To|DP|RHo|WS|DIR0|WC|RP" >> /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt
echo "" >> /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt
ncftpput -u XXXXXXXX -p XXXXXX XXXX.YYYY.fr /donnees/ /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt
Pour le script précédent ce n'est pas très gênant, puisque je peux me connecter à ma station et récupérer les données, ce qui revient au même, mais prenons le script suivant :
/home/ludovic/meteo/historique_mensuel.sh (executé toutes les nuits à minuit par crontab, mais ne fonctionne pas...)
#!/bin/bash
Date=$(egrep -i -w "Date" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
Date=$(echo $Date | cut -c1-16)
echo $Date
######################################################
#Température : Initialisation des variables :
To=$(egrep -i -w "To" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
cpt=0
moyenne=0
temp=$(echo $To | tr "To" "\n")
#Boucle d'addition des valeurs :
for x in $temp
do
moyenne=$(echo "scale=1;$moyenne+$x" | bc)
let "cpt = cpt + 1"
done
#Résultats :
echo -n "moy_To "
echo "scale=1;$moyenne/$cpt" | bc
######################################################
#Point de rosée : Initialisation des variables :
DP=$(egrep -i -w "DP" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
cpt=0
moyenne=0
temp=$(echo $DP | tr "DP" "\n")
#Boucle d'addition des valeurs :
for x in $temp
do
moyenne=$(echo "scale=1;$moyenne+$x" | bc)
let "cpt = cpt + 1"
done
#Résultats :
echo -n "moy_DP "
echo "scale=1;$moyenne/$cpt" | bc
######################################################
#Humidité relative : Initialisation des variables :
RHo=$(egrep -i -w "RHo" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
cpt=0
moyenne=0
temp=$(echo $RHo | tr "RHo" "\n")
#Boucle d'addition des valeurs :
for x in $temp
do
moyenne=$(echo "scale=1;$moyenne+$x" | bc)
let "cpt = cpt + 1"
done
#Résultats :
echo -n "moy_RHo "
echo "scale=1;$moyenne/$cpt" | bc
######################################################
#Vitesse du vent : Initialisation des variables :
WS=$(egrep -i -w "WS" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
cpt=0
moyenne=0
temp=$(echo $WS | tr "WS" "\n")
#Boucle d'addition des valeurs :
for x in $temp
do
moyenne=$(echo "scale=1;$moyenne+$x" | bc)
let "cpt = cpt + 1"
done
#Résultats :
echo -n "moy_WS "
echo "scale=1;$moyenne/$cpt" | bc
######################################################
#Temperature ressentie : Initialisation des variables :
WC=$(egrep -i -w "WC" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
cpt=0
moyenne=0
temp=$(echo $WC | tr "WC" "\n")
#Boucle d'addition des valeurs :
for x in $temp
do
moyenne=$(echo "scale=1;$moyenne+$x" | bc)
let "cpt = cpt + 1"
done
#Résultats :
echo -n "moy_WC "
echo "scale=1;$moyenne/$cpt" | bc
#################################################
#Pression réelle : Initialisation des variables :
RP=$(egrep -i -w "RP" /home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt)
cpt=0
moyenne=0
temp=$(echo $RP | tr "RP" "\n")
#Boucle d'addition des valeurs :
for x in $temp
do
moyenne=$(echo "scale=1;$moyenne+$x" | bc)
let "cpt = cpt + 1"
done
#Résultats :
echo -n "moy_RP "
echo "scale=1;$moyenne/$cpt" | bc
#################################################
#Pluie dernieres 24 heures :
echo $(egrep -i -w "R24h" /home/ludovic/meteo/donnees/actuel.txt)
#Retour à la ligne en fin de fichier :
echo ""
Je tiens à préciser qu'il s'agit de mes premiers scripts sous linux... Je pense que certains d'entre vous ne trouveront pas cela très propre... Je suis ouvert à toute proposition d'amélioration...
Lorsque ce script s'execute par crontab, c'est comme si le fichier/home/ludovic/meteo/donnees/historique_journalier/historique_journalier.txt n'était pas lu... Que se passe-t-il en réalité ? Avez-vous une solution ?
Je pensais à un problème de droits sur les fichiers, j'ai donc fait (méthode bourrin) un chmod 777 sur les fichiers du dossier /home/ludovic/meteo/ et un chmod +x sur tous les fichiers .sh
Merci par avance pour votre aide !
Edit : je viens de voir que j'ai posté dans la mauvaise partie du forum et je m'en excuse. Est-il possible de déplacer mon post ?
Dernière modification par ludovic815 (Le 02/09/2011, à 20:15)
Hors ligne
#2 Le 02/09/2011, à 20:14
- ludovic815
Re : [Résolu] Crontab : scripts sh qui ne fonctionnent pas...
Problème trouvé !
La variable PATH semble ne pas etre utilisée par crontab, alors qu'elle est définie dans /etc/crontab
Il suffit de mettre les chemins complets pour les commandes. Par exemple cat devient /bin/cat (on peut les trouver facilement grâce a la commande which)
Dernière modification par ludovic815 (Le 02/09/2011, à 20:14)
Hors ligne