Crontab qui rend fou

Bonjour,

C’est mon premier post ici, si j’ai oublié un truc ne m’en voulez pas trop :wink:

je me casse la tête depuis un certain temps, pour ne pas dire un temps certain, sur la planification d’un tache crontab.

En gros, la mise à jour de mes dyndns OVH.

ça fonctionnait nickl sur Jessie, mais depuis que je suis passé sur Stretch c’est le calvaire, déjà w3m qui était sur Jessie n’est plus sur Stretch, j’ai du faire avec lynx, mais là, c’est vraiment un truc bizarre qui m’arrive.

Je précise que tout fonctionne nickel si lancé dans un Shell à la main (avec le compte pi ou root, c’est pareil).

j’ai identifié la ligne qui me bloque et qui semblerait-il ne remonte rien via crontab (alors qu’à la main, vous pouvez la tester chez vous ça tourne, pensez à créer l’arborescence pour le fichier ip_new).

/usr/bin/lynx --source www.monip.org | sed -nre ‹ s/^.* (([0-9]{1,3}.){3}[0-9]{1,3}).*$/\1/p › >> /scripts/cache/ip_new

Normalement vous obtenez votre IP Publique. maintenant quand le fais un crontab -e, je créé un petit test.sh (sous oublier #!/bin/sh au début ), je colle la query du dessus dedans, et je balance son exécution dans crontab (toute les minutes je sais, le temps de debugguer le truc) :

*/1 * * * * /bin/bash /scripts/test.sh 2>/home/pi/cron_test.log

à chaque exécution, il n’écrit rien, le cron_test.log reste vide, le fichier ip_new est vide aussi (preuve qu’il y accede, il efface la donnée que je pourrais y mettre manuellement).

un cat /var/log/syslog|grep cron me dit que ça s’execute pourtant, le Cron tourne et lance le script.

j’ai un peu tout essayé, mettre les chemins complets, utiliser pi ou root, mettre des droits plutôt très permissifs, rien n’y fait, toujours pareil.

Si quelqu’un a une idée je prend :wink:

Salut,

J’avais fait un truc à « jouer » périodiquement.
J’ai failli devenir dingue à l’époque.

Au début, je faisais :
*/5 * * * * /home/pi/webcam/transfert.sh

Mais ça ne fonctionnait pas.
Il fallait faire :

*/5 * * * * cd/home/pi/webcam && bash transfert.sh

Donc, pour toi :
*/1 * * * * /bin/bash /scripts/test.sh
Devient
*/1 * * * * cd/tonchemin/scripts && bash test.sh

Je te laisse adapter, on me grogne dessus … je devrais être parti …

Salut,

Merci pour ta réponse ! En fait j’avais trouvé ton post de l’époque en faisant une recherche sur le forum et j’avais du coup déjà essayé, comme ça :

*/1 * * * * /bin/bash cd /scripts && bash test.sh 2>/home/pi/cron_test.log

et devine quoi? ça fonctionne pas ^^

mais bien tenté :smiley:

Ton script est où exactement ?

Salut,

Essai ça :

sudo crontab -e
*/1 * * * * /tonChemin/scripts/test.sh 2>/home/pi/cron_test.log1

@reboot bash /tonChemin/scripts/test.sh 2>/home/pi/cron_test.log1

Je viens de le faire sur mon Stretch pour un controle de ventilateur sur le PI3 B+

Il est dans /scripts (que j’ai créé)

Je viens de mettre ça en place j’attend la prochaine execution et je check le log.

@major86 : ça s’est executé, le fichier de log a été créé… vide.

evidemment, le fichier ip_new est vide aussi.

ce serait possible que la config réseau utilisé par crontab soit différente de celle utilisée dans le shell? si oui ça se vérifie comment? La seule chose qui fonctionne pas au final via crontab c’est l’appel du site web pour recupérer l’IP Publique (parce que dans le script complet qui fait pleins d’autres choses, tout le reste fonctionne très bien)

J’ai fais ceci :

sudo crontab -e
*/1 * * * * /home/pi/Script/auto-fan.sh >> /home/pi/Script/auto-fan.log 2>&1

@reboot bash /home/pi/Script/auto-fan.sh >> /home/pi/Script/auto-fan.log 2>&1

Mon log se rempli bien .

Exemple du contenu :slight_smile:
0 && « Stop $date - temp= $TEMP - low= $LOW »*echoStart 12:46:01-02-05-2018 - temp= 51002 - high= 50000

Stop 15:19:01-02-05-2018 - temp= 42932 - low= 45000
Stop 15:20:01-02-05-2018 - temp= 43470 - low= 45000
Stop 15:21:01-02-05-2018 - temp= 44008 - low= 45000
Stop 15:22:01-02-05-2018 - temp= 43470 - low= 45000
Stop 15:23:01-02-05-2018 - temp= 44008 - low= 45000
Stop 15:24:01-02-05-2018 - temp= 44546 - low= 45000
Stop 15:25:01-02-05-2018 - temp= 43470 - low= 45000
Stop 15:27:01-02-05-2018 - temp= 44008 - low= 45000
Stop 17:04:01-02-05-2018 - temp= 44008 - low= 45000
Stop 17:18:02-02-05-2018 - temp= 44546 - low= 45000
Stop 17:36:01-02-05-2018 - temp= 44546 - low= 45000
Start 19:25:01-02-05-2018 - temp= 51540 - high= 50000
Stop 19:26:01-02-05-2018 - temp= 44008 - low= 45000
Start 19:30:01-02-05-2018 - temp= 52616 - high= 50000
Stop 19:31:02-02-05-2018 - temp= 42932 - low= 45000
Start 19:42:01-02-05-2018 - temp= 50464 - high= 50000
Stop 19:43:02-02-05-2018 - temp= 43470 - low= 45000
Start 19:52:01-02-05-2018 - temp= 50464 - high= 50000
Stop 19:53:01-02-05-2018 - temp= 43470 - low= 45000
Start 20:25:01-02-05-2018 - temp= 51540 - high= 50000
Stop 20:27:02-02-05-2018 - temp= 41856 - low= 45000
Stop 20:28:01-02-05-2018 - temp= 44008 - low= 45000

Par contre pour ton affaire d’ip public n’y a t’il pas moyen de la fixée?

Bah moi aussi il se rempli, avec du vide, puisqu’il ne recupère pas l’IP. Si je rajoute dans le script un « echo plop » je vais voir pleins de plop dans le log, séparés par une ligne vide qui est celle ou est censé se trouver l’IP.

Pour le fait de fixer l’IP, chez Orange c’est payant (cher) et du oup il fat trouver une solution de contournement…

Tu peux tenter cette ligne

/usr/bin/lynx --source www.monip.org | sed -nre ‘s/^.* (([0-9]{1,3}.){3}[0-9]{1,3}).*$/\1/p’ >> /scripts/cache/$ip_new

j’ai testé, idem ça fonctionne dans un shell mais pas dans crontab.

Du coup j’ai abdiqué, j’ai viré dynhost et je suis passé à ddclient (qui fonctionne comme un service et pas dans crontab)

pas mal de temps à trouver la bonne conf’, mais au moins ça fonctionne.

merci quand même pour le coup de main !

C’est déjà ça, même si ce n’est pas exactement ce que tu voulais.C’est ça Linux toujours les mains dans le camboui :wink: