Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vider une table à minuit automatiquement...

ou "Cendrillon au pays de MySQL"

Sujet résolu
    4 décembre 2010 à 0:06:18

    Bonsoir à tous,

    Je cherche depuis quelques heures un moyen de vider une table automatiquement, tous les jours à minuit. Il s'agit d'une table toute bête qui comptabilise les visiteurs de la journée et j'aimerais logiquement la vider tous les soirs pour remettre le compteur à zéro. Mes recherches m'ont appris l'existence des "crontab" malheureusement les documentations que j'ai lu à ce sujet sont un peu complexes pour moi, je n'en comprends pas la syntaxe et j'ai peur de faire des bêtises :euh:

    Que me conseilleriez-vous pour exécuter la tache décrite ci-dessus le plus simplement possible ? Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2010 à 0:21:45

      Deux choix :
      1) Planificateur de tâche, si le SGBDR le permet (MySQL le fait, si la version est supérieure à 5.1)
      2) crontab

      Les deux méthodes sont plutôt simples.
      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2010 à 0:26:52

        Salut Fayden ! merci pour ta réponse rapide !
        C'est marrant, le lien que tu m'as donné est exactement celui que j'étais en train de lire... Par contre je n'arrive pas à le faire fonctionner.
        A priori ma requête devrait ressembler à ça :

        mysql> SET GLOBAL event_scheduler = 1 ;
        ON SCHEDULE EVERY 1 DAY STARTS '2010-12-04 00:00:00'
            DROP stats_day;
        


        Mais je dois place ça où ? Dans phpmyadmin ? Je reçois un message d'erreur. Sur mes pages PHP ? Théoriquement ça ne peut pas fonctionner si je ne recharge pas les pages :euh: Enfin voilà... J'essaye de comprendre mais sur le coup je suis un peu pommé :/

        PS : j'utilise mysql 5.10
        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2010 à 0:30:23

          1) Vérifie que ta version de MySQL est bel et bien 5.1 ou supérieure.
          2) Vérifie que le compte avec lequel tu te connectes sur phpmyadmin a les privilèges nécessaires.
          3) Tu dois effectivement entrer cette requête dans l'onglet SQL de phpmyadmin (ou directement en console, c'est pareil). Ensuite, c'est le SGBDR qui se charge du reste.

          Note aussi que tu ferais mieux de faire une requête DELETE / TRUNCATE plutôt que de supprimer ta table, sinon tu vas devoir la recréer à chaque fois.
          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2010 à 0:52:52

            ben je me connecte avec les infos mysql5-10, je pensais que ça correspondait tout simplement à la version utilisée :euh::lol: Après pour ce qui est des privilèges, tout est réglé par défaut et je n'ai rien trouve sur phpmyadmin qui me donne plus d'informations à ce sujet o_O

            J'ai réessayé la requête suivante telle qu'elle est spécifiée dans la doc :

            mysql> SET GLOBAL event_scheduler = 1 ;
            ON SCHEDULE EVERY 1 DAY STARTS '2010-12-04 00:00:00'
                DELETE * stats_day;
            


            Et j'obtiens l'erreur : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql> SET GLOBAL event_scheduler = 1' at line 1

            Donc je suppose que je n'ai pas la bonne version de MySQL en fin de compte... Je jetterai un œil à Cron demain.
            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2010 à 0:55:03

              Il ne faut pas que tu écrives mysql> dans ta requête, c'est simplement pour signaler que ce bout de code a été exécuté via la console.
              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2010 à 1:02:16

                Oups... quel boulet :-°

                Bon, du coup ça me confirme que je n'ai pas la bonne version :

                #1193 - Unknown system variable 'event_scheduler' :(


                EDIT :

                Bon, je me suis documenté sur Crontab. J'ai bien configuré le planificateur de tâches de OVH par contre je pense que mon fichier PHP n'est pas valide. La doc officielle dit ceci :

                Citation

                D'abord, il faut s'assurer que le script fonctionne en mode shell, c'est à dire qu'il est capable de s'exécuter depuis la ligne de commande. Pour cela, il faut placer dans la première ligne #!/usr/local/bin/php s'il s'agit d'un script php, #!/usr/bin/perl si c'est un script perl, ou #!/bin/bash pour un script shell, puis utiliser la commande chmod 700 script.cgi sur le script. Si vous avez l'accès telnet/ssh, vous pouvez tester son exécution avec ./script.cgi Cela est facultatif pour l'exécution d'un script PHP.

                N'oubliez pas d'utiliser la commande "cd /home/login" au début de votre script, ou bien d'utiliser des chemins absolus lorsque vous précisez le nom d'un fichier (par exemple /home/login/texte.txt au lieu de texte.txt), car votre script s'exécutera dans le répertoire.



                C'est du chinois à mes yeux o_O shell ? accès telnet/ssh ? chmod ? Jamais entendu parler de tout ça :/ Voilà ce que j'ai pour l'instant :

                <?php
                // connexion à la BDD
                	$hote = "****";
                	$utilisateur = "****";
                	$mPasse = "****";
                	$nombase = "****";
                	
                	$bdd = mysqli_connect($hote, $utilisateur, $mPasse, $nombase)
                		or die ("Connexion au serveur impossible");
                		
                	$delete = mysqli_query($bdd, 'DELETE FROM stats_day');
                ?>
                


                Pourriez vous m'aider à constituer ce fichier PHP svp ? :euh:
                • Partager sur Facebook
                • Partager sur Twitter
                  5 décembre 2010 à 13:28:08

                  Je me permet de remonter le topic, j'ai édité mon dernier message hier mais c'est passé inaperçu :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 décembre 2010 à 0:13:05

                    Tu devrais lire le cours Linux si tu sais pas ce que c'est que SSH...

                    Si non question d'optimisation, pour vider une table on utilise pas DELETE mais TRUNCATE, c'est bien plus performant.
                    http://dev.mysql.com/doc/refman/5.1/en [...] te-table.html
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 avril 2011 à 15:43:41

                      Salut à tous !

                      En recherchant une solution à mon problème de longue date je retombe sur mon topic irrésolu :p Elle est pas belle la vie ?

                      Bon, du coup 4 mois plus tard je n'ai toujours pas trouvé de solution et ce n'est pas faute d'avoir cherché ! Malheureusement les cours sont toujours trop confus pour moi (notamment celui du SDZ). Je ne cherche qu'à lancer un script me permettant de remettre mes visiteurs du jour à zéro donc je ne tiens pas à apprendre tout un langage juste pour ça, j'ai déjà du mal avec mon apprentissage de PHP :euh: C'est d'autant plus difficile à tester que le planificateur que j'utilise ne me permet de lancer la tache qu'une fois par heure.

                      Voilà où j'en suis :

                      • Je cherche à lancer un script depuis le planificateur de tâches d'OVH dont voici la doc.
                      • J'ai créé un fichier PHP que je pense être caduque faute d'informations précises
                      • J'ai configuré le Planificateur de taches mais là aussi je ne suis pas sûr d'avoir indiqué la bonne adresse (j'ai donné le lien absolu du fichier à savoir un truc comme "www.monsite.fr/scripts/fichier.php")


                      Et voici le script PHP à exécuter (je dois mettre l'adresse d'installation de PHP sur la première ligne... Je n'ai jamais installé PHP, je n'ai aucune idée de ce qui est attendu à cet endroit :euh: )

                      #!/usr/local/bin/php     <--- ???????
                      
                      <?php
                      // connexion à la BDD
                      	$hote = "*****";
                      	$utilisateur = "*****";
                      	$mPasse = "*****";
                      	$nombase = "*****";
                      	
                      	$bdd = mysqli_connect($hote, $utilisateur, $mPasse, $nombase)
                      		or die ("Connexion au serveur impossible");
                      		
                      	$delete = mysqli_query($bdd, 'DELETE * FROM stats_day');
                      ?>
                      



                      Comme vous l'avez compris je suis complètement largué sur ce problème. D'habitude j'arrive à me débrouiller mais là toutes les explications que j'ai trouvé ça et là ne s'adressent clairement pas aux néophytes de mon espèce...
                      Si une âme charitable pouvait m'aider à combler les vides ça serait génial !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 avril 2011 à 16:33:53

                        C'est OVH qui doit t'indiquer quelque part dans la doc où est installé PHP.
                        Le chemin est #!/usr/local/bin/php. Sans le "<--- ???????" ^^ .
                        Ceci est important car, dans le cadre des crons, le script n'est pas appelé "comme d'habitude", je veut dire en entrant une URL dans un navigateur, mais via la ligne de commande.
                        Si ça t'intéresse, crontab va l'appeler comme ça :
                        php script.php
                        ou comme ça :
                        php -f script.php

                        Le chemin du script, dans cette interface [IMG], doit être le chemin vu par le FTP.
                        Par exemple, si les fichiers du site sont dans /www/, il faut, pour appeler le cron situé à l'URL http://www.tonsite.com/crons/cron.php, mettre dans le champ "crons/cron.php".
                        Toujours dans la même interface, régler le champ "Langage du script" à la bonne valeur, et, dans la section Periodicité - Jours, cliquer sur Tous les jours.
                        Enfin, cliquer sur Valider (si, si ^^ ).

                        Je croit que tout est dit :) . En fait, finalement, tu n'a pas à toucher au fichier /etc/crontab.

                        PS : Pour info, l'accès telnet/ssh, c'est l'accès à distance via la console au serveur. Chez OVH, cette option n'est disponible qu'à partir de l'offre mutualisé Pro.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 avril 2011 à 17:11:46

                          Salut J-C !

                          Merci pour tes explications hyper détaillées, c'est exactement ce dont j'avais besoin :D Bon, en suivant tes recommandations j'ai remis tout ça en conformité (le chemin et la version de PHP n'étaient pas bonnes) et j'ai attendu le test de 17h... sans succès.
                          Puis j'ai réalisé que ma requête DELETE * FROM n'était pas bonne (:honte:). Je l'ai donc remplacée par "TRUNCATE TABLE stats_day" comme me l'avait suggéré kedare.
                          Je vous tiens au courant des résultats donnés à 18h !


                          EDIT : Le test de 18h n'a pas été concluant : la table stats_day n'a pas été vidée malgré les modifications proposées :(
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 avril 2011 à 21:02:19

                            Essaye d'ajouter le code suivant au fichier exécuté régulièrement :
                            <?php
                                 $to      = 'tonmail@example.com';  // Met ton mail ici
                                 $subject = 'Vérification du cron';
                                 $message = 'It work !';
                                 $headers = 'From: check-cron@php.net';
                            
                                 mail($to, $subject, $message, $headers);
                            ?>
                            

                            Puis exécute volontairement le cron (si possible, j'espère que ça ne l'est pas ; en allant à l'URL correspondante), et vérifie que tu reçois le mail (et que la table est vidée).

                            Puis attend la prochaine exécution du cron et voit si tu reçoit le mail. Si c'est le cas, c'est un problème au niveau de la requête SQL, sinon, c'est au niveau de l'exécution du cron.
                            C'est souvent utile, la fonction mail(), avec les crons :) .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 avril 2011 à 14:24:20

                              Hello :)

                              Alors avec ce test j'ai pu constater que la requête n'était pas bonne ET que le cron ne fonctionnait pas.
                              Je ne reçois pas le mail automatiquement à l'heure prévue par contre il part bien quand je lance le script manuellement.

                              EDIT : requête corrigée et fonctionnelle (en manuel)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 avril 2011 à 15:05:17

                                Donc le problème vient du cron.
                                Essaie de le supprimer et de le recréer.

                                Sinon, tu peux toujours contacter le service technique d'OVH (via le Manager : Manager du domaine > Contacter le support > Contacter l'assistance technique).

                                Je te rappelle que la mise en place du cron peut prendre de 5 minutes à 24 heures (c'est plus rare, mais ça peut arriver), en raison de la propagation de l'information sur tous les serveurs.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 avril 2011 à 15:14:18

                                  Ok, je l'ai recréé.

                                  Au niveau de la version, j'ai le choix entre PHP 4, PHP5, PHP 5.3 et Autre. J'ai choisi PHP 4, c'est bon ou il vaut mieux choisir "autre" (sachant que je suis en PHP 4.x.x) ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 avril 2011 à 16:01:11

                                    Chez OVH, sauf en configurant pour utiliser PHP 5.3, c'est PHP 4.4.9 qui l'est.
                                    Il faut donc choisir "PHP ver.4".

                                    PS : Un conseil, sort le cron de l'arborescence Web ! En gros, ne le met pas dans le dossier "www" (ou équivalent), car sinon, quiconque pourra l'exécuter comme bon lui semble :-° .
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      3 avril 2011 à 16:12:28

                                      Test de 16h : toujours rien :(
                                      J'ai envoyé un mail à OVH mais je m'attends à une réponse hors sujet de leur part, comme toujours.

                                      Où est-ce que je pourrais mettre le cron si je ne le mets pas dans le dossier ? Même si quelqu'un s'amuse à le lancer à volonté ça n'a pas une grande incidence, c'est juste pour mon compteur de visiteur/jour. Soit dit en passant le cron se trouve sur un autre site que celui pour lequel il est destiné. Je n'ai pas de planificateur sur le site concerné. Peut-être que ça joue (encore que ça m'étonnerait mais sait on jamais)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 avril 2011 à 16:13:43

                                        Il peut être mis dans le même dossier que le dossier www, à la racine du FTP. Ainsi, il n'est pas accessible via le web, mais via le cron, si :) .

                                        Citation : Mr_SATAN

                                        Soit dit en passant le cron se trouve sur un autre site que celui pour lequel il est destiné. Je n'ai pas de planificateur sur le site concerné. Peut-être que ça joue (encore que ça m'étonnerait mais sait on jamais)


                                        Ce n'est pas un problème.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 avril 2011 à 16:16:08

                                          ok, je vais suivre ton conseil une fois de plus :) Du coup le chemin dans le planificateur est simplement "cron.php" (au lieu de cron/cron.php) ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 avril 2011 à 16:28:05

                                            Et bien au lieu de mettre comme chemin /www/cron.php (par exemple), tu met /cron.php (le premier slash étant inscrit avant le champ, il ne faut bien sur pas le mettre ; c'est évident, mais je précise au cas où).
                                            Et n'oublie pas de déplacer le fichier cron.php en conséquence ! ^^
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 avril 2011 à 17:08:32

                                              Je crois que c'est bon. J'ai reçu le mail à 16h49 (l'heure du serveur serait-elle différente ?). J'attends le prochain test pour crier victoire :)

                                              EDIT : ça marche !!! Visiblement le problème venait du chemin du script.
                                              Merci beaucoup pour ton aide, tes explications claires et surtout ta patience J-C ! Grâce à toi en plus de venir à bout de ce script, j'ai appris à utiliser les crons :soleil:
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 avril 2011 à 22:23:38

                                                De rien.
                                                Mes réponses t'ont aidés, toi, auteur du sujet, du coup... :)[Edit : je retire, il y a du vert, j'avait pas vu ^^ ]

                                                Ps : N'oublie pas de modifier la fréquence d'exécution du cron ; il faut qu'il s'exécute tous les jours et pas toutes les heures ;) Et retire le code qui envoi le mail. Je pense que tu a déjà fait tout ça, mais on sait jamais... :-°
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Vider une table à minuit automatiquement...

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown