Подтвердить что ты не робот

Запуск mySQL-запроса в качестве задания cron?

Я хотел бы очистить мою базу данных SQL от всех желающих старше 1 недели, и я хотел бы сделать это в ночное время. Итак, я собираюсь создать работу cron. Как я могу запросить mySQL без необходимости вводить мой пароль вручную каждый раз?

Запрос в PHP выглядит следующим образом:

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

Есть ли способ запустить это как оболочку script? Если нет, существует ли способ заставить cron запустить php файл?

4b9b3361

Ответ 1

Попробуйте создать оболочку script, как показано ниже:

#!/bin/bash

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

Затем вы можете добавить это в cron

Ответ 2

Лично мне проще использовать планировщик событий MySQL, чем cron.

Включить его с помощью

SET GLOBAL event_scheduler = ON;

и создайте событие, подобное этому:

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;

и что это.

Узнайте больше о синтаксисе здесь и здесь - более общая информация о нем.

Ответ 3

Это зависит от того, что работает cron в вашей системе, но все, что вам нужно сделать для запуска php script из cron, - это выполнить вызов установки php, а затем местоположение script. Пример: crontab работает каждый час:

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

В моей системе мне даже не нужно указывать путь к установке php:

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

В другой заметке вы не должны использовать расширение mysql, поскольку оно устарело, если вы не используете более старую установку php. Прочитайте здесь для сравнения.

Ответ 4

Это была очень удобная страница, так как у меня есть требование для DELETE записей из таблицы mySQL, где дата истечения срока действия равна < Cегодня.

Я нахожусь на общем хосте, и CRON не понравилось предложение AndrewKDay. он также сказал (и я согласен), что разоблачение пароля таким образом может быть небезопасным.

Затем я попытался включить события ON в phpMyAdmin, но опять же, на общем хосте, это не было. Извините fancyPants.

Итак, я обратился к встраиванию SQL script в файл PHP. Я использовал пример [здесь] [1]

[1]: https://www.w3schools.com/php/php_mysql_create_table.asp хранит его в подпапке где-то в безопасности и добавляет пустой index.php для хорошей меры. Затем я смог проверить, что этот PHP файл (и мой SQL script) работает из строки URL-адреса браузера.

Все до сих пор. На CRON. Следуя приведенному выше примеру, почти сработало. Я закончил тем, что вызвал PHP до пути для моего *.php файла. В противном случае CRON не знал, что делать с файлом.

мой cron настроен на запуск один раз в день и выглядит так, измененный для безопасности.

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

Для окончательного тестирования с CRON я изначально настроил его на запуск каждую минуту и ​​включил оповещения по электронной почте. Это быстро подтвердило, что оно работает так, как планировалось, и я изменил его на один раз в день.

Надеюсь, что это поможет.