Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Cron, crontab, kcron et script.

3 réponses
Avatar
Geo Cherchetout
Bonjour,
À la sueur de mon front et avec l'aide d'experts, j'ai enfin réussi à
écrire un petit script destiné à récupérer mon adresse IP du moment sur
mon modem-routeur externe et à mettre à jour un fichier-journal situé
dans mon répertoire personnel.
Ce script s'exécute parfaitement, en mon nom comme en celui de root,
depuis la ligne de commande, ou en le double-cliquant dans konqueror,
ou en choisissant "exécuter maintenant" sous kcron, mais je ne parviens
pas à le faire exécuter périodiquement par crond.
J'ai utilisé kcron, qui a enregistré cette tâche en rajoutant dans
/var/spool/cron/geo la ligne que voici :

-0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/geo/superscript

(Le tiret en début de ligne est bien présent mais il n'est pas gênant.)
Puis, comme ça ne marchait pas, j'ai supprimé cette tâche et recréé la
même dans /var/spool/cron/root. Mais le résultat est le même. :-(
L'accès à tous les répertoires et fichiers visités par le script est
bien ouvert en fonction des besoins à root comme à geo. Crond est bien
en cours d'exécution. D'autres tâches sont bien effectuées en temps et
en heure. Pourquoi pas celle-ci ?

Voici la dernière trace laissée dans /var/log/messages :

Jan 22 22:25:00 PIII CROND[13928]: (root) CMD (/home/geo/superscript)

Quant à ce petit script, toute honte bue, le voilà. Je l'améliorerai
quand j'en serai capable :

#!/bin/sh
wget -O router.html --http-user= --http-passwd=mot_de_passe
http://10.0.0.138/cgi/router/
adrip=$(grep -m 1 "PPP1" router.html | awk '{print $6}')
ancadrip=$(tail -n 1 Desktop/AdressIP.txt | awk '{print $NF}')
ancjour=$(awk '{print $1}' Desktop/AdressIP.txt | tail -n 1)
jour=$(date +%e/%m/%G)
heure=$(date +%kh%M)
if [ "$jour" = "$ancjour" ]; then
echo
else
echo $jour >> Desktop/AdressIP.txt
fi
if [ "$adrip" = "$ancadrip" ]; then
echo
else
echo " "$heure $adrip >> Desktop/AdressIP.txt
fi

Précisions :
. La première ligne (enregistrement de router.html) n'est pas réalisée.
. La suite non plus. (J'ai mis n'importe quelle adresse dans le champ
utile de router.html pour voir.)
. Le fichier router.html, le script et le dossier Desktop sont dans mon
répertoire personnel /home/geo.

Merci d'avance pour vos conseils.

3 réponses

Avatar
no_spam
On Thu, 22 Jan 2004 22:39:27 +0100, Geo Cherchetout wrote:

Bonjour,
À la sueur de mon front et avec l'aide d'experts, j'ai enfin réussi à
écrire un petit script destiné à récupérer mon adresse IP du moment sur
mon modem-routeur externe et à mettre à jour un fichier-journal situé
dans mon répertoire personnel.
Ce script s'exécute parfaitement, en mon nom comme en celui de root,
depuis la ligne de commande, ou en le double-cliquant dans konqueror,
ou en choisissant "exécuter maintenant" sous kcron, mais je ne parviens
pas à le faire exécuter périodiquement par crond.
...

Quant à ce petit script, toute honte bue, le voilà. Je l'améliorerai
quand j'en serai capable :

#!/bin/sh
wget -O router.html --http-user= --http-passwd=mot_de_passe
http://10.0.0.138/cgi/router/
....

Précisions :
. La première ligne (enregistrement de router.html) n'est pas réalisée.
. La suite non plus. (J'ai mis n'importe quelle adresse dans le champ
utile de router.html pour voir.)
. Le fichier router.html, le script et le dossier Desktop sont dans mon
répertoire personnel /home/geo.


Comme d'habitude, avec cron: son environement n'est pas le même que
celui d'un shell utilisateur. En particulier, le PATH est différent.
Donc, il ne faut pas se reposer sur l'environnement.
Pour celà, il faut, par exemple, utiliser les paths complet
des executables et pas seulement leur nom:
/usr/bin/wget à la place de wget,
etc...

Avatar
Geo Cherchetout
Le 22.01.2004 23:40, no_spam a écrit fort à propos :

Comme d'habitude, avec cron: son environement n'est pas le même que
celui d'un shell utilisateur. En particulier, le PATH est différent.
Donc, il ne faut pas se reposer sur l'environnement.


Je n'ai pas encore vraiment d'habitudes mais, par chance, le problème ne
venait pas de là : J'omettais dans mon script de donner le chemin
complet des fichiers où se déroule l'action. Cron, avec ses gros sabots,
ne les trouvait donc pas, alors que moi, pour lancer le script, je me
plaçais systématiquement dans le répertoire où ils se trouvent.
Le problème est résolu en ajoutant au début de ce script la ligne :
cd /home/geo.
Merci quand-même parce que c'est ta suggestion qui m'a conduit
rapidement à me poser la bonne question.

Avatar
no_spam
On Fri, 23 Jan 2004 17:34:56 +0100, Geo Cherchetout wrote:

Le 22.01.2004 23:40, no_spam a écrit fort à propos :

Comme d'habitude, avec cron: son environement n'est pas le même que
celui d'un shell utilisateur. En particulier, le PATH est différent.
Donc, il ne faut pas se reposer sur l'environnement.


Je n'ai pas encore vraiment d'habitudes mais, par chance, le problème ne
venait pas de là : J'omettais dans mon script de donner le chemin
complet des fichiers où se déroule l'action. Cron, avec ses gros sabots,
ne les trouvait donc pas, alors que moi, pour lancer le script, je me
plaçais systématiquement dans le répertoire où ils se trouvent.
Le problème est résolu en ajoutant au début de ce script la ligne :
cd /home/geo.
Merci quand-même parce que c'est ta suggestion qui m'a conduit
rapidement à me poser la bonne question.


En effet, c'est une bonne raison :-)
Mais prends quand même l'habitude de coder le chemin complet
des executables pour tout ce qui ne s'execute pas dans un
environnement utilisateur standard:
ça épargne de longues heures d'acharnement sur ces scripts rebelles :-)