#1 Le 23/01/2013, à 16:05
- Graindorge
problème de script avec cron
Bonjour,
J'ai un DNS dynamique chez OVH (dynhost). J'utilise un script qui va mettre à jour le dns avec l'ip dynamique de mon router. Je l'ai trouvé sur le net (ici) et je l'ai adapté à ma situation.
voila le script :
#!/bin/bash
## CONFIGURATION ##
# Connection to OVH DynHost
username=xxxxx
password=yyyyyy
host=host.be
# How to log
# 1 = true, 0 = false
log_change=1
log_no_change=0
log_file=/var/log/dynhost.log
# File with old IP
old_ip_file=/var/cache/ip_old
# To avoid error "file not found"
touch ${old_ip_file}
touch ${log_file}
# Get Public IP
ip=`w3m -dump http://xxxxxx.xx/ | awk -F': ' '/IP/ { print $2 }'`
# Get Old Public IP
ip_old=`cat ${old_ip_file}`
# Test if IPs are equal
if [ "${ip}" = "${ip_old}" ]
then
if [ "${log_no_change}" = "1" ]
then
echo "`date`: No IP change was found (${ip})" >> ${log_file}
fi
else
echo ${ip} > ${old_ip_file}
if [ "${log_change}" = "1" ]
then
echo "`date`: IP has change (Old : ${ip_old}, New : ${ip})" >> ${log_file}
updatedd ovh -- --ipv4 ${ip} ${username}:${password} ${host} >> ${log_file}
else
updatedd ovh -- --ipv4 ${ip} ${username}:${password} ${host}
fi
fi
Le script fonctionne correctement quand je le lance manuellement à la ligne de commande. Voila le contenu de /var/log/dynhost.log après une mise à jour réussie de l'ip chez ovh :
mercredi 23 janvier 2013, 14:53:48 (UTC+0100): IP has change (Old : 213.251.165.203, New : 213.219.123.102)
host.be: Update good and successful, IP updated.
Mais quand je veux exécuter cette tache avec cron ça ne fonctionne pas. Le script semble s'exécuter mais en "sautant" la mise à jour chez ovh avec l'appel updatedd. Voici le contenu de /var/log/dynhost.log après une mise à jour ratée de l'ip chez ovh :
mercredi 23 janvier 2013, 14:53:48 (UTC+0100): IP has change (Old : 213.251.165.203, New : 213.219.123.102)
Il manque le message de retour de updatedd ovh -- --ipv4 ${ip} ${username}:${password} ${host} >> ${log_file}
Voila la ligne que j'ai rajouté dans cron.
*/15 * * * * /root/scripts/updateDynhost.sh
Quelqu'un a une idée ? Parce que là moi je vois vraiment pas.
Merci.
Hors ligne
#2 Le 23/01/2013, à 17:36
- Graindorge
Re : problème de script avec cron
Je crois avoir trouvé. En mettant le chemin absolu de updatedd, ça fonctionne.
/usr/local/bin/updatedd ovh -- --ipv4 ${ip} ${username}:${password} ${host}
Donc une question, je pensais qu'en exécutant le script avec cron on était dans le même environnement que celui de l’utilisateur ? Y a t il moyen que ce soit le cas.
Merci.
Dernière modification par Graindorge (Le 23/01/2013, à 17:36)
Hors ligne
#3 Le 24/01/2013, à 06:47
- nesthib
Re : problème de script avec cron
Par défaut cron n'est chargé qu'avec un minimum de variables d'environnement (LOGNAME, HOME, SHELL et quelques autres pour la gestion du mail), il faut donc définir le PATH si l'on n'indique pas les chemins absolus des exécutables.
Il est aussi possible de définir d'autres variables d'environnement (par exemple DISPLAY si l'on lance des programmes graphiques).
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DISPLAY=":0"
# m h dom mon dow command
0 0 * * * ma_commande_du_path
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne