Mon cron-job ne fonctionne plus

Résolu
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -
bonjour a tous

j ai un cron-job fonctionnel et je souhaiterais en faire une tache quotidienne

je suis hébergé chez hostinger et je souhaite donc mettre mon cron-job dans une tache a exécuter tous les jours

j ai suivi ce tuto
https://www.hostinger.fr/tutoriels/cron-jobs

alors que mon cron-job fonctionne de façon manuelle il ne fonctionne plus une fois mis en place
dans les taches

lorsque je dis qu il ne fonctionne plus
c est que rien ne se passe ...

11 réponses

  1. Utilisateur anonyme
     
    B'jour,

    On ira pas loin si on ne sait pas à quoi ressemble ta cron.
    1
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Et que t'affiche le bouton "Afficher les résultats" :
    https://www.hostinger.fr/tutoriels/wp-content/uploads/sites/9/2017/05/supprimer-cron-hostinger.png

    Et comme le dit Pyraah .. si tu ne nous montres pas le code de ta cron ( le script ( php je suppose) que tu essayes d'exécuter).. impossible de t'en dire plus.
    ( à part, pense à activer l'affichage des erreurs php dans ton code, et places de echo / var_dump .. pour essayer de voir ce que fait (ou non) ton script )

    1
  3. Utilisateur anonyme
     
    C'est ta cron que j'ai demandé à voir, pas le code PHP :).

    Edit : je laisse Jordane et Pitet prendre le relais, n'étant pas certain de pouvoir répondre ce soir :).
    1
  4. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    bonjour merci pour l aide
    le voici

    <?php
    /**
     * Sauvegarde MySQL
     *
     * @package BackupMySQL
     * @author Benoit Asselin <contact@ab-d.fr>
     * @version backup.php, 2013/01/13
     * @link http://www.ab-d.fr/
     *
     */
    
    
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    
    
    /**
     * Sauvegarde MySQL
     */
    class BackupMySQL extends mysqli {
     
     /**
      * Dossier des fichiers de sauvegardes
      * @var string
      */
     protected $dossier;
     
     /**
      * Nom du fichier
      * @var string
      */
     protected $nom_fichier;
     
     /**
      * Ressource du fichier GZip
      * @var ressource
      */
     protected $gz_fichier;
     
     
     /**
      * Constructeur
      * @param array $options
      */
     public function __construct($options = array()) {
      $default = array(
       'host' => ini_get('mysqli.default_host'),
       'username' => ini_get('mysqli.default_user'),
       'passwd' => ini_get('mysqli.default_pw'),
       'dbname' => '',
       'port' => ini_get('mysqli.default_port'),
       'socket' => ini_get('mysqli.default_socket'),
       // autres options
       'dossier' => 'phil/backup/',
       'nbr_fichiers' => 5,
       'nom_fichier' => 'backup'
       );
      $options = array_merge($default, $options);
      extract($options);
      
      // Connexion de la connexion DB
      @parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
      if($this->connect_error) {
       $this->message('Erreur de connexion (' . $this->connect_errno . ') '. $this->connect_error);
       return;
      }
      
      // Controle du dossier
      $this->dossier = $dossier;
      if(!is_dir($this->dossier)) {
       $this->message('Erreur de dossier "' . htmlspecialchars($this->dossier) . '"');
       return;
      }
      
      // Controle du fichier
      $this->nom_fichier = $nom_fichier . date('Ymd-His') . '.sql.gz';
      $this->gz_fichier = @gzopen($this->dossier . $this->nom_fichier, 'w');
      if(!$this->gz_fichier) {
       $this->message('Erreur de fichier "' . htmlspecialchars($this->nom_fichier) . '"');
       return;
      }
      
      // Demarrage du traitement
      $this->sauvegarder();
      $this->purger_fichiers($nbr_fichiers);
     }
     
     /**
      * Message d'information ( commenter le "echo" pour rendre le script invisible )
      * @param string $message HTML
      */
    protected function message($message = ' ') {
      echo '<p style="padding:0; margin:1px 10px; font-family:sans-serif;">'. $message .'</p>';
      file_put_contents( __DIR__ . 'log_'.date("Y-m-d").'.log', date("Y-m-d H:i:s") . ' - ' . $message . PHP_EOL, FILE_APPEND);
     }
     
     /**
      * Protection des quot SQL
      * @param string $string
      * @return string
      */
     protected function insert_clean($string) {
      // Ne pas changer l'ordre du tableau !!!
      $s1 = array( "\\" , "'" , "\r", "\n", );
      $s2 = array( "\\\\" , "''" , '\r', '\n', );
      return str_replace($s1, $s2, $string);
     }
     
     /**
      * Sauvegarder les tables
      */
     protected function sauvegarder(){
      $this->message('Sauvegarde...');
      
      $sql  = '--' ."\n";
      $sql .= '-- '. $this->nom_fichier ."\n";
      gzwrite($this->gz_fichier, $sql);
      
      // Liste les tables
      $result_tables = $this->query('SHOW TABLE STATUS');
      if($result_tables && $result_tables->num_rows) {
       while($obj_table = $result_tables->fetch_object()) {
        $this->message('- ' . htmlspecialchars($obj_table->{'Name'}));
        
        // DROP ...
        $sql  = "\n\n";
        $sql .= 'DROP TABLE IF EXISTS `'. $obj_table->{'Name'} .'`' .";\n";
    
        // CREATE ...
        $result_create = $this->query('SHOW CREATE TABLE `'. $obj_table->{'Name'} .'`');
        if($result_create && $result_create->num_rows) {
         $obj_create = $result_create->fetch_object();
         $sql .= $obj_create->{'Create Table'} .";\n";
         $result_create->free_result();
        }
    
        // INSERT ...
        $result_insert = $this->query('SELECT * FROM `'. $obj_table->{'Name'} .'`');
        if($result_insert && $result_insert->num_rows) {
         $sql .= "\n";
         while($obj_insert = $result_insert->fetch_object()) {
          $virgule = false;
          
          $sql .= 'INSERT INTO `'. $obj_table->{'Name'} .'` VALUES (';
          foreach($obj_insert as $val) {
           $sql .= ($virgule ? ',' : '');
           if(is_null($val)) {
            $sql .= 'NULL';
           } else {
            $sql .= '\''. $this->insert_clean($val) . '\'';
           }
           $virgule = true;
          } // for
          
          $sql .= ')' .";\n";
          
         } // while
         $result_insert->free_result();
        }
        
        gzwrite($this->gz_fichier, $sql);
       } // while
       $result_tables->free_result();
      }
      gzclose($this->gz_fichier);
      $this->message('<strong style="color:green;">' . htmlspecialchars($this->nom_fichier) . '</strong>');
      
      $this->message('Sauvegarde terminée !');
     }
     
     /**
      * Purger les anciens fichiers
      * @param int $nbr_fichiers_max Nombre maximum de sauvegardes
      */
     protected function purger_fichiers($nbr_fichiers_max) {
      $this->message();
      $this->message('Purge des anciens fichiers...');
      $fichiers = array();
      
      // On recupere le nom des fichiers gz
      if($dossier = dir($this->dossier)) {
       while(false !== ($fichier = $dossier->read())) {
        if($fichier != '.' && $fichier != '..') {
         if(is_dir($this->dossier . $fichier)) {
          // Ceci est un dossier ( et non un fichier )
          continue;
         } else {
          // On ne prend que les fichiers se terminant par ".gz"
          if(preg_match('/\.gz$/i', $fichier)) {
           $fichiers[] = $fichier;
          }
         }
        }
       } // while
       $dossier->close();
      }
      
      // On supprime les  anciens fichiers
      $nbr_fichiers_total = count($fichiers);
      if($nbr_fichiers_total >= $nbr_fichiers_max) {
       // Inverser l'ordre des fichiers gz pour ne pas supprimer les derniers fichiers
       rsort($fichiers);
       
       // Suppression...
       for($i = $nbr_fichiers_max; $i < $nbr_fichiers_total; $i++) {
        $this->message('<strong style="color:red;">' . htmlspecialchars($fichiers[$i]) . '</strong>');
        unlink($this->dossier . $fichiers[$i]);
       }
      }
      $this->message('Purge terminée !');
     }
     
    }
    
    
    
    // Instance de la classe ( a copier autant que necessaire, mais attention au timeout )
    // Rq: pour les parametres, reprendre une ou plusieurs cles de $default ( dans la methode __construct() )
    new BackupMySQL(array(
     'username' => 'u4',
     'passwd' => '',
     'dbname' => 'u4'
     ));
    
    //new BackupMySQL(array(
    // 'username' => 'root',
    // 'passwd' => 'root',
    // 'dbname' => 'mabase',
    // 'dossier' => './dossier2/'
    // ));
    
    
    
    ?>
    0
    1. Pitet Messages postés 2845 Statut Membre 530
       
      Bonjour,

      A priori ton code crée un fichier log_<date>.log dans le même dossier où est situé le fichier php. Il y t-il une erreur dans ce fichier log ?

      Au passage, pense à masquer/modifier l'utilisateur et le mot de passe mysql sur le code posté sur un forum si ce n'est pas déjà le cas.
      0
      1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > Pitet Messages postés 2845 Statut Membre
         
        bonjour Pitet
        merci pour la réponse en effet il crée un log quand tout c est bien passe
        mais comme rien ne se passe je n ai pas de log
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    bonjour jordane

    je précise que ce script exécuter en manuel fonctionne

    je place ou ces echo var_dump jordane

    voici la capture d écran
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      ben visiblement il ne trouve pas le fichier ...
      Comment as tu créés ta cron ?
      Quel chemin à tu mis pour le fichier à exécuter ?
      Où est-il placé dans l'arborescence de ton site ?
      0
      1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        oui jordane c est bien ça il ne trouve pas le fichier
        voici mon dernier chemin en essai
        mais je dois attendre 30 mm pour savoir si cela fonctionne a présent

        /usr/bin/php /home/u43/Domains/pecheperle.be/public_html/backup.php


        et le fichier backup.php
        est placé a la racine de mon domaine
        0
  7. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    voici la liste des taches cron
    ce sont tous des essais mais aucun fonctionne

    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      et c'est lequel que tu nous as montré ( au niveau de la fenêtre résultat ) ?
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Si c'est le dernier de la liste .. il me semble normal qu'il ne fonctionne pas...
        Regarde comment sont fais les autres...
        0
  8. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci de l aide
    voila cela ne fonctionne toujours pas
    aucun de la liste ne fonctionne
    en fait ils s affichent tous le même résultat
    a savoir qu il ne trouve pas le fichier
    0
    1. Pitet Messages postés 2845 Statut Membre 530
       
      La constante __FILE__ en php contient le chemin du script exécuté.

      Tu peux donc par exemple afficher cette constante au début de ton fichier backup.php :
      <?php
      /**
       * Sauvegarde MySQL
       */
      
      error_reporting(E_ALL);
      ini_set('display_errors', true);
      
      echo __FILE__;
      exit();
      

      Puis appeler ce fichier dans ton navigateur pour vérifier le chemin.

      Pense bien sûr à supprimer ces deux nouvelles lignes pour tester à nouveau la tache cron avec le bon chemin.
      0
  9. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci pour le code
    je viens d essayer de mettre le chemin que j ai obtenu comme tache de cron
    mais cela ne fonctionne toujours pas
    /home/u43/domains/pecheperle.be/public_html/backup.php

    et le resultaat comme message

    est ceci

    timeout: failed to run command ‘/home/u435/domains/pecheperle.be/public_html/backup.php’: Permission denied

    apparemment il refuse l accès au dossier
    0
    1. Pitet Messages postés 2845 Statut Membre 530
       
      Dans la commande de la tâche cron il ne faut pas mettre uniquement le chemin, il faut appeler l'exécutable php (dans le dossier /usr/bin) puis renseigner le chemin php à exécuter.

      La syntaxe de ton dernier essai était correct, la seule différence sur le chemin semble être l'absence de majuscule sur le dossier domains. La commande de la tâche cron devrait donc être :
      /usr/bin/php /home/u43/domains/pecheperle.be/public_html/backup.php 
      0
  10. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    ah je pense que on est sur la bonne voie , merci pour cette modification
    voici le nouveau message d erreur

    <p style="padding:0; margin:1px 10px; font-family:sans-serif;">Erreur de dossier "phil/backup/"</p>


    je dois peut être mettre el dossier de récupération dans le même endroit que le fichier backup.php

    voila je viens d essayer de mettre le dossier backup a la racine
    en changeant bien évidement le chemin dans backup .php

    mais toujours ce message

    <p style="padding:0; margin:1px 10px; font-family:sans-serif;">Erreur de dossier "backup/"</p>


    j ai essaye aussi en mettant le chemin complet

    /usr/bin/php /home/u43/domains/pecheperle.be/public_html/

    pourtant si je lance le backup en manuel cela fonctionne
    0
    1. Pitet Messages postés 2845 Statut Membre 530
       
      En effet le script php est désormais bien exécuté.

      Concernant le dossier, est-ce que tu as créé un dossier backup dans le dossier public_html ?
      Si oui, essaye de renseigner le chemin absolu vers ce dossier dans l'option dossier :
      new BackupMySQL(array(
          'username' => 'root',
          'passwd' => '123456',
          'dbname' => 'mabase',
          'dossier' => '/home/u43/domains/pecheperle.be/public_html/backup/'
      ));
      
      0
  11. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    bonjour Pitet

    merci pour la réponse et la solution
    note bien qu hier j avais fait un essai avec le chemin absolu et cela n avait pas fonctionner
    a présent tout semble fonctionner a merveille

    j attends encore un peu avant d indiquer en résolu

    encore mille fois merci
    tu m enlèves une fameuse aiguille du pied
    0
  12. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    je confirme cela fonctionne
    merci et bonne journée
    0