Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
La différence entre une session terminal et en crontab est l'environnement (resultat de env). Sur ton problème, je miserai sur le PATH variable qui permet de définir les répertoires ou trouver les binaires/programmes que l'on pouvoir appeler justement sans path complet.
Je vois que tu utilises curl, jq (bonne pioche!) essaie pour chaque programme de mettre le chemin complet d'accès au programme (ou via variable définies en debut de script). Pour tester, tu peux ecrire/log dans un fichier et mettre une intervalle très court en crontab.
Pour info (je suis sysadmin aussi parfois ...) un script destiné a être en cron doit toujours être testé en cron justement
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
L'environnement est un ensemble de variables renseignées par le système que tu utilises sans le savoir (taper env pour voir la liste et valeurs). En particulier une variable qui s'appelle PATH qui permet d'exécuter des commandes sans devoir taper le chemin complet. Pour curl, il faudrait taper tout /usr/bin/curl mais PATH est gérée justement par le système pour te faciliter la vie (liste de chemins séparés par des : ).
Pour trouver les chemins complets de curl ou jq, la commande whereis devrait te le dire => whereis jq. Copie le chemin complet dans ton script, au lieu de jq => /usr/bin/jq par ex et pour tester ton script entre le en crontab avec exécution toute les minutes (* * * * ...) en remplaçant ta commande finale par un echo si tu veux éviter de l'exécuter tout le temps (en test) ou echo "..." >> /tmp/fichier_de_log.
Au besoin fait des echo >> intermédiaires pour savoir ou ton script ne fonctionne pas comme prévu (ce n'est peut-être pas les paths ...)
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
J'avais pourtant fait un chmod 777 sur mon script
puis j'avais edit cron par : sudo crontab -e
et ensuite : */2 * * * * /home/pi/domoticz/scripts/shell/./updatewu.sh
mais cela ne fonctionnait pas
je viens de rajouter sudo a */2 * * * * /home/pi/domoticz/scripts/shell/./updatewu.sh
deennoo a écrit :... et cela fonctionne, je ne comprends pas pk ayant deja editer le cron par sudo
+1 sur le commentaire de vil1driver:
- inutile de mettre ./ si tu mets un chemin complet, le ./ signifie => dans le répertoire courant
- je ne vois pas en quoi ton script qui ne fait que du curl et jq aurait besoin de privilèges root
Peut-être lié a mon explication, l'environnement, différent entre pi et root (+ les droits), qui ferait que ton script s'exécute en étant root et pas en etant pi. Que se passe-t-il lorsque tu exécutes ton script avec le user pi et sans sudo -> simplement /home/pi/domoticz/scripts/shell/updatewu.sh dans un terminal ? Ou sont tes binaires curl et jq et le user pi a-t-il les droits d'exécuter ces binaires ? => si tu tapes simplement curl ou jq dans un terminal ?
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20