Page 1 sur 1

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

Posté : mer. 29 mai 2019 18:32
par deneth
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.

Re: cron et php, ça veut pas

Posté : mer. 29 mai 2019 20:34
par domi
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

Re: cron et php, ça veut pas

Posté : jeu. 30 mai 2019 09:45
par mike913
Bonjour
Je pense qu'il s"agit d'un problème de chemin

Re: cron et php, ça veut pas

Posté : ven. 31 mai 2019 09:11
par jelopo
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+

Re: cron et php, ça veut pas

Posté : ven. 31 mai 2019 20:24
par Artemus24
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

@+