Discussion:
Qu'est-ce qui empêche un script php de s'écuter en CRON ?
(trop ancien pour répondre)
Didier
2019-09-24 14:41:26 UTC
Permalink
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL vers
des fichiers .csv), je rajoute deux commandes "copy" toutes simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui marchait
bien initialement, s'éxécute, mais pas les deux commandes "copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
Merci.
Didier.
Denis Beauregard
2019-09-24 16:18:39 UTC
Permalink
Post by Didier
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL vers
des fichiers .csv), je rajoute deux commandes "copy" toutes simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui marchait
bien initialement, s'éxécute, mais pas les deux commandes "copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
C'est la commande system ? Il faut peut-être tout bonnement changer
le dossier actif avant de faire les copies ?


Denis
Didier
2019-09-24 18:18:26 UTC
Permalink
Post by Denis Beauregard
Post by Didier
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL vers
des fichiers .csv), je rajoute deux commandes "copy" toutes simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui marchait
bien initialement, s'éxécute, mais pas les deux commandes "copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
C'est la commande system ? Il faut peut-être tout bonnement changer
le dossier actif avant de faire les copies ?
Denis
Bonjour, et merci.
non, je me sius mal exprimé, ce n'est pas une commande copy, mais
l'instruction php copy.
Voici les lignes qu ne s'éxécutent pas :
$rep="/media/cle-usb/";
copy("Comptes.txt",$rep."Comptes.txt");

Didier.
Olivier Miakinen
2019-09-24 18:26:41 UTC
Permalink
Post by Didier
Post by Denis Beauregard
C'est la commande system ? Il faut peut-être tout bonnement changer
le dossier actif avant de faire les copies ?
non, je me sius mal exprimé, ce n'est pas une commande copy, mais
l'instruction php copy.
D'accord. Ceci, donc :
<https://www.php.net/manual/en/function.copy.php>
Post by Didier
$rep="/media/cle-usb/";
copy("Comptes.txt",$rep."Comptes.txt");
Tu as bien mis un chemin absolu pour la destination (à savoir
/media/cle-usb/Comptes.txt) mais pas pour la source (c'est
seulement Comptes.txt). Es-tu sûr que le répertoire courant
est bien celui que tu crois, quand le script est lancé par
cron ?
--
Olivier Miakinen
Olivier Miakinen
2019-09-24 18:29:41 UTC
Permalink
Post by Olivier Miakinen
Tu as bien mis un chemin absolu pour la destination (à savoir
/media/cle-usb/Comptes.txt) mais pas pour la source (c'est
seulement Comptes.txt). Es-tu sûr que le répertoire courant
est bien celui que tu crois, quand le script est lancé par
cron ?
Voir les commandes getcwd() et chdir() :
<https://www.php.net/manual/en/book.dir.php>
--
Olivier Miakinen
Olivier Miakinen
2019-09-24 16:33:46 UTC
Permalink
Bonjour,
Post by Didier
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL vers
des fichiers .csv), je rajoute deux commandes "copy" toutes simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui marchait
bien initialement, s'éxécute, mais pas les deux commandes "copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
Je ne connais pas le Raspberry PI, mais je vais supposer que ça
fonctionne comme un GNU/Linux. Ceci étant posé, voici quelques
suggestions.

1) Quand tu lances PHP et le script via CRON, tu n'as pas les mêmes
droits d'accès que quand tu le lances à la main.

-> Essaye de copier dans un répertoire dont les droits sont 777
(écriture autorisée pour tout le monde).

2) Tu copies en donnant un chemin relatif « truc/chose » alors que
le répertoire courant n'est pas le même quand tu le lances via
CRON.

-> Essaye de copier vers un chemin absolu « /machin/truc/chose ».

3) Ta commande "copy" toute simple est un script maison qui appelle
la commande standard /bin/cp, mais elle n'est plus dans le PATH
quand tu l'appelles par CRON.

-> Essaye d'utiliser la commande standard, avec son chemin d'accès
complet « /bin/cp ».
--
Olivier Miakinen
Didier
2019-09-24 18:30:30 UTC
Permalink
Post by Didier
Bonjour,
Post by Didier
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL vers
des fichiers .csv), je rajoute deux commandes "copy" toutes simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui marchait
bien initialement, s'éxécute, mais pas les deux commandes "copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
Je ne connais pas le Raspberry PI, mais je vais supposer que ça
fonctionne comme un GNU/Linux.
Oui, effectivement, basé sur Debian.
Ceci étant posé, voici quelques
Post by Didier
suggestions.
1) Quand tu lances PHP et le script via CRON, tu n'as pas les mêmes
droits d'accès que quand tu le lances à la main.
Le script contient tout un bloc d'instructions qui s'éxécutent bien; j'y
ai juste rajouté à la fin :
$rep="/media/cle-usb/";
copy("Comptes.txt",$rep."Comptes.txt");
Cette "copy" ne s'exécute pas.
Je pense donc que les droits sont OK (j'ai pas mal galéré il y a qq mois
sur ce point pour faire fonctionner ce script via CRON, mais demuis ce
temps-là il me sauvegarde mes tables MySQL fidèlement toutes les nuits à
00:00).
Post by Didier
-> Essaye de copier dans un répertoire dont les droits sont 777
(écriture autorisée pour tout le monde).
2) Tu copies en donnant un chemin relatif « truc/chose » alors que
le répertoire courant n'est pas le même quand tu le lances via
CRON.
Eh oui ! C'est bien le chemin relatif qui pose problème dans le CRON.
Une fois dit, ça paraît évident, mais c'est mieux quand quand on a un
petit coup de main là-dessus.
Chapeau bas ! Je viens de vérifier, c'est nickel.
Un très grand merci !
Didier.
Olivier Miakinen
2019-09-24 18:31:09 UTC
Permalink
Post by Didier
Eh oui ! C'est bien le chemin relatif qui pose problème dans le CRON.
Une fois dit, ça paraît évident, mais c'est mieux quand quand on a un
petit coup de main là-dessus.
Et donc, tu peux oublier ma réponse de 20 h 29.
Post by Didier
Chapeau bas ! Je viens de vérifier, c'est nickel.
Un très grand merci !
:-)
--
Olivier Miakinen
Lulu
2019-12-02 23:22:14 UTC
Permalink
Post by Didier
Post by Olivier Miakinen
Post by Didier
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL
vers des fichiers .csv), je rajoute deux commandes "copy" toutes
simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui
marchait bien initialement, s'éxécute, mais pas les deux commandes
"copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
Je ne connais pas le Raspberry PI, mais je vais supposer que ça
fonctionne comme un GNU/Linux.
Oui, effectivement, basé sur Debian.
Post by Olivier Miakinen
Ceci étant posé, voici quelques suggestions.
1) Quand tu lances PHP et le script via CRON, tu n'as pas les mêmes
droits d'accès que quand tu le lances à la main.
Le script contient tout un bloc d'instructions qui s'éxécutent bien; j'y
$rep="/media/cle-usb/";
copy("Comptes.txt",$rep."Comptes.txt");
Cette "copy" ne s'exécute pas.
Elle s'exécute.
Mais comme tu ne regardes pas la sortie d'erreur, tu ne vois pas ce qui
cloche...
(En même temps que j'écris ça, je ne me souviens plus de comment faire
pour récupérer le code d'erreur ;-)
Post by Didier
Je pense donc que les droits sont OK (j'ai pas mal galéré il y a qq
mois sur ce point pour faire fonctionner ce script via CRON, mais
demuis ce temps-là il me sauvegarde mes tables MySQL fidèlement
toutes les nuits à 00:00).
Post by Olivier Miakinen
-> Essaye de copier dans un répertoire dont les droits sont 777
(écriture autorisée pour tout le monde).
2) Tu copies en donnant un chemin relatif « truc/chose » alors que
le répertoire courant n'est pas le même quand tu le lances via
CRON.
Eh oui ! C'est bien le chemin relatif qui pose problème dans le CRON.
Une fois dit, ça paraît évident, mais c'est mieux quand quand on a un
petit coup de main là-dessus.
Chapeau bas ! Je viens de vérifier, c'est nickel.
Un très grand merci !
Didier.
Classique !
Mais ton message est utile, au moins pour ceux (dont moi) qui ne
penseraient pas à regarder systématiquement la sortie d'une commande
(standard ET erreur).
Didier
2019-12-03 08:34:41 UTC
Permalink
Post by Lulu
Post by Didier
Post by Olivier Miakinen
Post by Didier
Bonjour,
J'ai un script PHP appelé par une tâche CRON. Tout va bien comme prévu.
A la fin de ce script (dédié à faire des sauvegardes de bases MySQL
vers des fichiers .csv), je rajoute deux commandes "copy" toutes
simples.
Si je lance ce script à la main, il s'éxécute bien en entier.
Si je laisse faire la tâche CRON, seule la première partie, qui
marchait bien initialement, s'éxécute, mais pas les deux commandes
"copy" rajoutées.
Je sèche, et si quelqu'un voulait bien me donner un coup de pouce ...
Je suis sur un RaspBerry PI 3+, sous Jessie.
Je ne connais pas le Raspberry PI, mais je vais supposer que ça
fonctionne comme un GNU/Linux.
Oui, effectivement, basé sur Debian.
Post by Olivier Miakinen
Ceci étant posé, voici quelques suggestions.
1) Quand tu lances PHP et le script via CRON, tu n'as pas les mêmes
droits d'accès que quand tu le lances à la main.
Le script contient tout un bloc d'instructions qui s'éxécutent bien; j'y
$rep="/media/cle-usb/";
copy("Comptes.txt",$rep."Comptes.txt");
Cette "copy" ne s'exécute pas.
Elle s'exécute.
Mais comme tu ne regardes pas la sortie d'erreur, tu ne vois pas ce qui
cloche...
(En même temps que j'écris ça, je ne me souviens plus de comment faire
pour récupérer le code d'erreur ;-)
Post by Didier
Je pense donc que les droits sont OK (j'ai pas mal galéré il y a qq
mois sur ce point pour faire fonctionner ce script via CRON, mais
demuis ce temps-là il me sauvegarde mes tables MySQL fidèlement
toutes les nuits à 00:00).
Post by Olivier Miakinen
-> Essaye de copier dans un répertoire dont les droits sont 777
(écriture autorisée pour tout le monde).
2) Tu copies en donnant un chemin relatif « truc/chose » alors que
le répertoire courant n'est pas le même quand tu le lances via
CRON.
Eh oui ! C'est bien le chemin relatif qui pose problème dans le CRON.
Une fois dit, ça paraît évident, mais c'est mieux quand quand on a un
petit coup de main là-dessus.
Chapeau bas ! Je viens de vérifier, c'est nickel.
Un très grand merci !
Didier.
Classique !
Mais ton message est utile, au moins pour ceux (dont moi) qui ne
penseraient pas à regarder systématiquement la sortie d'une commande
(standard ET erreur).
Bjr,
je ne sais pas non plus où regarder les logs d'erreurs de ce processus
(j'y ai bien pensé, et j'ai cherché).
Didier.
Jo Engo
2019-12-03 10:46:58 UTC
Permalink
Post by Didier
je ne sais pas non plus où regarder les logs d'erreurs de ce processus
(j'y ai bien pensé, et j'ai cherché).
ça n'est pas cron qui gère ça ? Un petit man cron pje dit ça mais je ne
l'ai pas encore fait) autrement tout part sur la console

en agissant sur la crontab quelque chose comme :

php /path/ton-script |tee /ton/home/scripts/sortie 2> /ton/home/scripts/sortie-erreur
--
Travailles au flash avec un Canon, et tu comprendras vite que le mode
manuel est ta planche de salut ! ;o))
-+- Pierre, sur fr.rec.photo -+-
Continuer la lecture sur narkive:
Loading...