Mon cron-job ne fonctionne plus

Résolu/Fermé
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 - 3 août 2021 à 16:39
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 - 4 août 2021 à 08:47
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 ...
A voir également:

11 réponses

Utilisateur anonyme
3 août 2021 à 16:51
B'jour,

On ira pas loin si on ne sait pas à quoi ressemble ta cron.
1
jordane45 Messages postés 38242 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2024 4 689
3 août 2021 à 16:58
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
Utilisateur anonyme
Modifié le 3 août 2021 à 17:21
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
Modifié le 3 août 2021 à 17:20
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
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
3 août 2021 à 17:15
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
3 août 2021 à 17:22
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
3 août 2021 à 17:07
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
jordane45 Messages postés 38242 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2024 4 689
3 août 2021 à 17:22
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187 > jordane45 Messages postés 38242 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2024
3 août 2021 à 17:34
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
3 août 2021 à 17:22
voici la liste des taches cron
ce sont tous des essais mais aucun fonctionne

0
jordane45 Messages postés 38242 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2024 4 689
3 août 2021 à 17:27
et c'est lequel que tu nous as montré ( au niveau de la fenêtre résultat ) ?
0
jordane45 Messages postés 38242 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2024 4 689 > jordane45 Messages postés 38242 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2024
3 août 2021 à 17:28
Si c'est le dernier de la liste .. il me semble normal qu'il ne fonctionne pas...
Regarde comment sont fais les autres...
0
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
Modifié le 3 août 2021 à 18:20
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
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
3 août 2021 à 18:43
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
Modifié le 3 août 2021 à 20:34
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
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
3 août 2021 à 21:01
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
Modifié le 3 août 2021 à 22:38
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
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
4 août 2021 à 08:15
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
4 août 2021 à 08:39
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
flexi2202 Messages postés 3799 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 16 mai 2024 187
4 août 2021 à 08:47
je confirme cela fonctionne
merci et bonne journée
0