Tâches automatiques (cron) - Script Cron ne produit rien alors qu'il s'exécute (resolu)
... / Script Cron ne produit ri...
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Frage

Script Cron ne produit rien alors qu'il s'exécute (resolu)

Von
OliL
Erstellungsdatum 2021-06-16 14:07:34 (edited on 2024-09-04 11:50:17) in Tâches automatiques (cron)

bonjour,
Je suis occupé à créer un site pour un événement d'une ASBL et je butte sur l'exécution d'un simple script PHP via une tâche cron sur mon Manager.
Ce script sert à déplacer des images créées par des membres ou visiteurs (sorte de carte d'identité) vers un dossier backup (exemple : img_event/image_215.jpg > img_event_bck/image_215.jpg) via la fonction rename()
L'exécution du script en manuel (appel de la page via le navigateur) fonctionne bien. Je peux voir que mon dossier d'origine img_event est vidé et img_event_bck est rempli avec les images déplacées.

Depuis ce midi, j'ai enregistré une tâche Cron dans mon manager, à exécuter chaque heure.
Selon les logs, le Cron s'exécute bien, exit code 0, pas d'erreur et cela se fait en moins d'1 seconde.
Malgré cela, rien n'est déplacé !
Mes paramètres Cron OVH : image
L'adresse du fichier commence bien par www/ dans les paramètres.

Ici le log donné par OVH
image

Bout de code pour faire lister le dossier et en copier ses fichiers sauf '.' '..' et 'index.html' :`$i = '0';
$ii = '0';
// Liste les fichiers en array
$files = scandir("./www/gc/imGC9BAKF4/");
// Dossiers source et destination
$source = "./www/gc/imGC9BAKF4/";
$destination = "./www/gc/imGC9BAKF4_bck/";
// Boucle de fichiers
foreach ($files as $file) {
$i=$i+1;
if (in_array($file, array(".","..","index.html"))) continue;

// Si c'est copié, efface !
if (copy($source.$file, $destination.$file)) {
$ii = $ii+1;
unlink($source.$file);
}`

Pourquoi le script ne fonctionne t-il pas en mode auto alors que si je le lance moi-même, il fonctionne ?
Les logs renseignent que le fichier est bien trouvé et exécuté. J'ai même créé un cron clone sur un 2e fichier avec un autre script créant un simple fichier texte sur le serveur avec l'heure écrite dans le fichier. En manuel, ok, testé 3x (j'ai effacé le fichier créé à chaque fois), en auto, après 2h, aucun fichier créé.


1 Antwort ( Latest reply on 2021-06-22 15:56:56 Von
OliL
)

Bonjour @OliL

Par quoi commence ton script ?

Bonjour Gaston_phone.

Désolé, entre-temps, mon script a été modifié, il venait d'un autre hébergeur et l'accès au dossier ne comprenait pas les fameux _/www/_ utilisés chez OVH.
Depuis cette modif, et jusqu'à présent, cela fonctionnait bien. Les stats logs CRON me donnaient une exécution sans erreur et tout fonctionnait.

Cet après-midi, **sans changement aucun ni sur le serveur, ni dans le script**... de nouveau erreur.

Le script commence bien par _les variables pour le scandir() sont
> $files = scandir("www/ev/imagesb/");
> // Identify directories
> $source = "www/ev/imagesb/";
> $destination = "www/ev/imagesb_bck/";

et donc, depuis 14h aujourd'hui, les erreurs défilent :
> Warning: scandir(www/ev/imagesb/): failed to open dir: No such file or directory in /home/anims/www/ev/cron.php on line 6
> Warning: scandir(): (errno 2): No such file or directory in /home/anims/www/ev/cron.php on line 6
> Warning: Invalid argument supplied for foreach() in /home/anims/www/ev/cron.php on line 11
> Fichiers déplacés : 0 - Fichiers virés : 0

comme si le dossier imagesb avait disparu, alors qu'il est bien sur le serveur et qu'il a deux fichiers à l'intérieur.

Voilà le souci !
Quand le cron exécute lui même le script, aucune erreur.
Si je l'exécute moi même (ou une autre personne), erreur du scandir().

Pour l'exécuter moi même, je dois changer le chemin d'accès du dossier "www/ev/imagesb/" en "imagesb/" et de fait, cela fonctionne mais si le cron l'exécute, erreur.

Je voulais changer un paramètre et ajouter une ligne pour n'effacer que les *.jpg et vérifier si cela fonctionnait correctement en l'exécutant moi même.

Résolu donc, mais je ne comprends pas pourquoi une différence pour le chemin d'accès au dossier si on l'exécute nous même (ce qui sera rare maintenant) et si le cron exécute.

Antworten sind derzeit für diese Frage deaktiviert.