web-dev-qa-db-fra.com

Exécuter une requête MySQL en tant que tâche cron?

Je souhaite purger ma base de données SQL de toutes les entrées âgées de plus d'une semaine, et j'aimerais le faire tous les soirs. Donc, je vais mettre en place un travail cron. Comment interroger mySQL sans avoir à entrer mon mot de passe manuellement à chaque fois?

La requête dans PHP est la suivante:

mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7");

Existe-t-il un moyen de l'exécuter en tant que script Shell? Sinon, y a-t-il moyen de faire exécuter à cron un fichier php?

32
Paolo

Essayez de créer un script Shell comme celui ci-dessous:

#!/bin/bash

mysql --user=[username] --password=[password] --database=[db name] --execute="DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7"

Vous pouvez ensuite ajouter ceci au cron

41
Andy Day

Personnellement, je trouve plus facile d’utiliser le planificateur d’événements MySQL que cron.

Activer avec

SET GLOBAL event_scheduler = ON;

et créez un événement comme celui-ci:

CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7;

et c'est tout.

En savoir plus sur la syntaxe ici et ici fournit des informations plus générales à ce sujet.

79
fancyPants

Cela dépend de ce qui exécute cron sur votre système, mais tout ce que vous avez à faire pour exécuter un script php à partir de cron consiste à appeler l'emplacement de l'installation php suivi de l'emplacement du script. Un exemple avec crontab lancé toutes les heures:

# crontab -e
00 * * * * /usr/local/bin/php /home/path/script.php

Sur mon système, je n'ai même pas à mettre le chemin de l'installation php:

00 * * * * php /home/path/script.php

Sur une autre note, vous ne devriez pas utiliser l'extension mysql car elle est obsolète, sauf si vous utilisez une ancienne installation de php. Lire ici pour une comparaison.

9
miyasudokoro

Cette page était très utile car je dois impérativement supprimer des enregistrements d'une table mySQL dont la date d'expiration est <aujourd'hui.

Je suis sur un hôte partagé et CRON n'a pas aimé la suggestion AndrewKDay. il a également dit (et je suis d'accord) que révéler le mot de passe de cette manière pourrait être peu sûr.

J'ai ensuite essayé d'activer les événements dans phpMyAdmin, mais encore une fois, être sur un hôte partagé était un non non. FancyPants Désolé.

Je me suis donc tourné vers l'intégration du script SQL dans un fichier PHP. J'ai utilisé l'exemple [ici] [1]

[1]: https://www.w3schools.com/php/php_mysql_create_table.asp stocké dans un sous-dossier sécurisé et ajouté un index.php vide pour une bonne mesure. J'ai ensuite pu vérifier que ce fichier PHP (et mon script SQL) fonctionnait à partir de la ligne URL du navigateur.

Tout va bien jusqu'à présent. À CRON. Suivre l’exemple ci-dessus a presque fonctionné. J'ai fini par appeler PHP avant le chemin de mon fichier * .php. Sinon, CRON ne savait pas quoi faire avec ce fichier.

mon cron est configuré pour fonctionner une fois par jour et ressemble à ceci, modifié pour la sécurité.

00 * * * * php mywebsiteurl.com/wp-content/themes/ForteChildTheme/php/DeleteExpiredAssessment.php

Pour le test final avec CRON, je l'avais initialement configuré pour s'exécuter toutes les minutes et activer les alertes par courrier électronique. Cela a rapidement confirmé qu'il fonctionnait comme prévu et je l'ai modifié une fois par jour.

J'espère que cela t'aides.

0
John Anderson