Tâche cron - exitcode: 255
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.
Question

Tâche cron - exitcode: 255

by
JeromeD76
Created on 2023-01-02 15:07:38 (edited on 2024-09-04 11:40:02) in Hébergements Web

Bonjour,

J'ai un fichier cron.php qui s'exécute parfaitement si j'y accède par son url web, mais qui échoue si je le fait exécuter par une tâche cron.


Le problème, c'est que OVH ne donne absolument aucune information sur l'erreur. Tout ce que je sais, grâce aux logs, c'est que j'ai un "exitcode: 255". Je ne comprends pas comment un développeur est sensé déboguer avec ce pauvre indice, surtout quand la tâche cron ne peut être exécuté qu'une fois par heure?

Quel est l'origine du problème de l'erreur "exitcode: 255" ? J'ai beaucoup de lignes et pas mal de fichiers, sans erreur je sais pas où chercher, c'est ridicule.

- Est-ce que c'est parce que mon script retourne des var_dump que cela plante?
- Est-ce que parce que le script a du mal avec un chemin lorsqu'il est utilisé en tâche cron?

Merci d'avance :)


3 Replies ( Latest reply on 2023-01-02 17:52:47 by
JeromeD76
)

Bonjour,

ce sont des chemins relatifs dans le script ?

Cordialement, janus57

Bonjour Janus,

J'ai envoyé mon message initial par erreur, sans l'achever.... Je voulais partager le code ci-dessous. Ce sont les deux seuls endroits ou il y a des require_once().

1) Appel à spl_autoload_register().

spl_autoload_register(static function (string $fqcn) {
// $fqcn contient Domain\Forum\Message
// remplaçons les \ par des / et ajoutons .php à la fin.
// on obtient Domain/Forum/Message.php
$path = str_replace('\\', '/', $fqcn) . '.php';
// puis chargeons le fichier
if (file_exists(__DIR__.'/'.$path)) {
require_once(__DIR__.'/'.$path);
}
});

use App\Domain\Utils\Utils;

Notes:

J'utilise des `use` (par exemple: `use App\Domain\Utils\Utils` en haut de certains de mes fichiers php). L'appel à spl_autoload_register() permet de charger les fichiers requis. Par exemple la ligne `use App\Domain\Utils\Utils;` va charger automatiquement le fichier `App/Domain/Utils/Utils.php`.

2) require_once __DIR__.'/../vendor/autoload.php';


namespace App;

require_once __DIR__.'/../vendor/autoload.php';

use App\Domain\Database\Mysql;
use App\Domain\Utils\Utils;
use App\Domain\History\Log;
use App\Domain\Rapidapi\ScrapeNinja;

class App
{
...

La moche ligne `require_once __DIR__.'/../vendor/autoload.php'` me permet de charger un package que j'ai installé via composer. Ce n'est probablement pas la bonne méthode, mais malgré ma patience et mes recherches je n'ai pas trouvé comment charger ce fichier autrement pour l'utiliser avec une tâche cron.

Voilà, ce sont vraiment les deux endroits ou j'include des fichiers. Le problème vient de là tu penses?

Bonjour,

En mettant ces lignes au tout début de votre script, les erreurs seront visibles dans les logs.
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('log_errors', '1');


error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('log_errors', '1');


Merci je vais essayer ca ! Plus qu'à attendre 40 minutes


J'ai un fichier cron.php qui s'exécute parfaitement si j'y accède par son url web, mais qui échoue si je le fait exécuter par une tâche cron.


Et si votre cron invoquait la page web plutôt que le script ?
Ainsi votre script sera exécuté dans l'environnement du serveur web.

Je ne suis pas sûr de comprendre? Le champ _Commande à exécuter_ ne permet pas de mettre d'URL



Ou alors tu veux dire que la tâche exécute par exemple trucmuche.php et que dans trucmuche.php je fais un appel curl à cron.php qui lui va exécuter tout le code?


Ou alors tu veux dire que la tâche exécute par exemple


Tu lances une tâche de type shell, (exemple.sh)

Ce fichier exemple.sh pourrait contenir :

#!/bin/bash
wget -o /dev/null -O /dev/null https://tonsite.com/exemple.php

et mettre la permission execute sur ce fichier

Je ne pense pas avoir accès à ça avec mon offre pro2014