Запуск mySQL-запроса в качестве задания cron?
Я хотел бы очистить мою базу данных SQL от всех желающих старше 1 недели, и я хотел бы сделать это в ночное время. Итак, я собираюсь создать работу cron. Как я могу запросить mySQL без необходимости вводить мой пароль вручную каждый раз?
Запрос в PHP выглядит следующим образом:
mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7");
Есть ли способ запустить это как оболочку script? Если нет, существует ли способ заставить cron запустить php файл?
Ответы
Ответ 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 я изначально настроил его на запуск каждую минуту и включил оповещения по электронной почте. Это быстро подтвердило, что оно работает так, как планировалось, и я изменил его на один раз в день.
Надеюсь, что это поможет.