it-swarm.com.de

Eine mySQL-Abfrage als Cron-Job ausführen?

Ich möchte meine SQL-Datenbank von allen Einträgen löschen, die älter als 1 Woche sind, und dies möchte ich jeden Abend tun. Also werde ich einen Cronjob einrichten. Wie frage ich mySQL ab, ohne jedes Mal mein Passwort manuell eingeben zu müssen?

Die Abfrage in PHP lautet wie folgt:

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

Gibt es eine Möglichkeit, dies als Shell-Skript auszuführen? Wenn nicht, gibt es eine Möglichkeit, cron dazu zu bringen, eine PHP-Datei auszuführen?

32
Paolo

Versuchen Sie, ein Shell-Skript wie das folgende zu erstellen:

#!/bin/bash

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

Sie können dies dann zum Cron hinzufügen

41
Andy Day

Ich persönlich finde es einfacher, den MySQL-Event-Scheduler zu verwenden als cron.

Aktivieren Sie es mit

SET GLOBAL event_scheduler = ON;

und erstelle ein Event wie dieses:

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;

und das ist es.

Lesen Sie mehr über die Syntax hier und hier sind allgemeinere Informationen dazu.

79
fancyPants

Es hängt davon ab, was cron auf Ihrem System ausführt, aber alles, was Sie tun müssen, um ein PHP-Skript von cron aus auszuführen, ist, den Speicherort der PHP-Installation gefolgt vom Speicherort des Skripts aufzurufen. Ein Beispiel mit Crontab, das jede Stunde ausgeführt wird:

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

Auf meinem System muss ich nicht einmal den Pfad zur PHP-Installation angeben:

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

In einem anderen Fall sollten Sie keine mysql-Erweiterung verwenden, da diese veraltet ist, es sei denn, Sie verwenden eine ältere Installation von PHP. Lesen Sie hier zum Vergleich.

9
miyasudokoro

Dies war eine sehr nützliche Seite, da ich die Anforderung habe, Datensätze aus einer mySQL-Tabelle zu LÖSCHEN, deren Ablaufdatum <Heute ist.

Ich bin auf einem geteilten Host und CRON mochte den Vorschlag AndrewKDay nicht. Es hieß auch (und ich stimme zu), dass die Offenlegung des Passworts auf diese Weise unsicher sein könnte.

Ich habe dann versucht, Events in phpMyAdmin einzuschalten, aber wieder auf einem gemeinsam genutzten Host zu sein, war dies ein Nein Nein. Entschuldigung fancyPants.

Also habe ich das SQL-Skript in eine PHP Datei eingebettet. Ich habe das Beispiel [hier] [1] verwendet.

[1]: https://www.w3schools.com/php/php_mysql_create_table.asp hat es in einem Unterordner an einem sicheren Ort abgelegt und eine leere index.php hinzugefügt. Ich konnte dann testen, ob diese PHP Datei (und mein SQL-Skript) über die URL-Zeile des Browsers funktioniert.

Alles gut soweit. Weiter zu CRON. Dem obigen Beispiel zu folgen hat fast funktioniert. Am Ende habe ich PHP vor dem Pfad für meine * .php-Datei aufgerufen. Sonst wusste CRON nicht, was ich mit der Datei anfangen sollte.

mein Cron ist so eingestellt, dass er einmal pro Tag ausgeführt wird und sieht aus Sicherheitsgründen so aus.

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

Für den abschließenden Test mit CRON habe ich es zunächst so eingestellt, dass es jede Minute ausgeführt wird und E-Mail-Warnungen aktiviert sind. Dies bestätigte schnell, dass es wie geplant lief und ich änderte es wieder auf einmal pro Tag.

Hoffe das hilft.

0
John Anderson