Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#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. wink
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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

Hors ligne

Haut de page ↑