[PHP] - cron et php, ça veut pas

Parce qu'il en faut pour tout le monde, discutez ici d'ADA, de shell et autres Wolfram...

Modérateur : Francois

Répondre
Avatar du membre
deneth
Messages : 11
Enregistré le : dim. 16 sept. 2018 14:17

[PHP] - cron et php, ça veut pas

Message par deneth » mer. 29 mai 2019 18:32

J'ai un truc bizarre avec une tâche cron qui lance un script php.

Mon script php récupère des infos, et les enregistre dans un fichier json. Jusque la tout fonctionne correctement.

Je voulais que ce script soit exécuté toutes les 15 min, je fais donc une tâche cron comme ceci : crontab -e

Code : Tout sélectionner

*/15 * * * * /usr/bin/php -f /home/pi/www/crypto/getPrices.php
et là rien ne se passe, je veux dire que mon fichier json n'est pas mis à jour. J'ai essayé différentes choses, mettre php -f /home/pi/www/crypto/getPrices.php, sans le -f, rien n'y fais.
Passer par un script bash

Code : Tout sélectionner

#!/bin/bash

cd /home/pi/www/crypto/
php -f getPrices.php
appelé par

Code : Tout sélectionner

*/15 * * * * /home/pi/www/crypto/cronphp.sh
ne fonctionne pas aussi.

En cherchant sur le net j'ai fini par rajouter > /home/pi/www/crypto/getPrices.log 2>&1 à la ligne cron.

Code : Tout sélectionner

*/15 * * * * /home/pi/www/crypto/cronphp.sh > /home/pi/www/crypto/getPrices.log 2>&1
Le fichier log est bien créé, mais vide, et mon fichier json n'est toujours pas à jour.

J'ai fini par essayer de faire le cron par l'user root : sudo crontab -e. Et la ça fonctionne !!!
Que ce soit le /usr/bin/php -f ou par un fichier bash ça fonctionne.

Pourquoi le cron de l'utilisateur pi ne marche pas? et celui de root fonctionne ???
De plus le fichier log, et le fichier json sont des fichier pi ( et non pas root )

Quand on fait sudo crontab -e c'est bien l'utilisateur root ?

Je comprends plus rien.

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: cron et php, ça veut pas

Message par domi » mer. 29 mai 2019 20:34

Bonjour,

Je pense à un problème de droit :
  • Soit l'utilisateur n'a pas le droit d'écriture dans le fichier JSON
  • Soit l'utilisateur n'a pas droit d'exécuter php
  • Soit l'utilisateur n'a pas le droit de lire le fichier "getPrices.php"
  • Soit c'est dans le script php que quelque chose est bloqué à l'utilisateur courant.
Que donne la commande "/usr/bin/php -f /home/pi/www/crypto/getPrices.php" dans une console de l'utilisateur ?

"sudo crontab -e" Permet bien d'éditer la crontab de root.
"crontab -e" permet d'éditer la crontab de l'utilisateur courant
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: cron et php, ça veut pas

Message par mike913 » jeu. 30 mai 2019 09:45

Bonjour
Je pense qu'il s"agit d'un problème de chemin
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: cron et php, ça veut pas

Message par jelopo » ven. 31 mai 2019 09:11

Bonjour,

Découper en parties simples et vérifiables.

1 - Valider la crontab
*/15 * * * * echo date >> /tmp/crondate.log 2>&1
2 - Valider le lancement du script avec une redirection
Ajouter une ou des lignes echo "texte..." dans le script bash
Vérifier que le script est executable
3 - Re-modifier la crontab avec le script bash
4 - Ecrire un script PHP simple (phpinfo)
5 - Appeler ce PHP dans le bash en manuel puis avec la cron
6 - Éventuellement ajouter un shebang dans le script PHP, le rendre executable et le lancer sans /usr/bin/php

Déjà ça va débroussailler un peu...

A+

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: cron et php, ça veut pas

Message par Artemus24 » ven. 31 mai 2019 20:24

Salut à tous.

Quand on ne sait pas, on fait le chose étape par étape, comme le souligne si judicieusement Jelopo.
Je suis du même avis que Domi, je pense que vous n'avez pas attribuer les bons droits à l'exécutable.

Je ne vois pas le user ? Quand vous utilisez la crontab, il faut préciser avec quel utilisateur vous le faites.
Si vous faites cela sous "root", on doit voir le compte "root" dans la ligne de la crontab.
Je sais, l'utilisateur est facultatif d'où les problèmes de droits sur l'exécutable.

La syntaxe de la crontab est : m h dom mon dow user cmd

Pour déclencher quelque chose toutes les 15 minutes, on indique "*/15" dans le premier paramètre.
C'est ce que vous avez fait et c'est très bien.

Au lieu de surcharger votre cmd ainsi, faites référence à un script bash qui va mettre en forme la ou les commandes que vous allez lancer.

à utiliser :
--> http://www.desmoulins.fr/index.php?pg=i ... _generator

Et quelques commandes utiles :
--> crontab -l : affichier le contenu de la crontab
--> crontab -r : supprimer toutes les actions
--> export EDITOR=nano
Puis crontab -e : pour éditer les actions du crontab

--> https://fr.wikipedia.org/wiki/Cron

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Répondre

Retourner vers « Autres langages »