Я хотел бы очистить мою базу данных SQL от всех желающих старше 1 недели, и я хотел бы сделать это в ночное время. Итак, я собираюсь создать работу cron. Как я могу запросить mySQL без необходимости вводить мой пароль вручную каждый раз?
Запрос в PHP выглядит следующим образом:
mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7");
Есть ли способ запустить это как скрипт оболочки? Если нет, есть ли способ заставить cron запустить php-файл?
Попробуйте создать сценарий оболочки, как показано ниже:
#!/bin/bash mysql --user=[username] --password=[password] --database=[db name] --execute="DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7"
Затем вы можете добавить это в cron
Мне лично легче использовать планировщик событий MySQL, чем cron.
Включите его с помощью
SET GLOBAL event_scheduler = ON;
и создать такое событие:
CREATE EVENT ON SCHEDULE EVERY 1 DAY STARTS '2014-01-18 00:00:00' DO DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7;
вот и все.
Подробнее о синтаксисе здесь и здесь содержится более общая информация об этом.
Это зависит от того, что работает cron в вашей системе, но все, что вам нужно сделать, чтобы запустить php-скрипт из cron, – это вызвать расположение установки php, а затем место расположения скрипта. Пример: crontab работает каждый час:
# crontab -e 00 * * * * /usr/local/bin/php /home/path/script.php
В моей системе мне даже не нужно указывать путь к установке php:
00 * * * * php /home/path/script.php
С другой стороны, вы не должны использовать расширение mysql, потому что оно устарело, если вы не используете более старую установку php. Читайте здесь для сравнения.
Это была очень удобная страница, так как у меня есть требование удалить DELETE записи из таблицы mySQL, где дата истечения срока действия <Сегодня.
Я нахожусь на общем хосте, и CRON не понравилось предложение AndrewKDay. он также сказал (и я согласен), что разоблачение пароля таким образом может быть небезопасным.
Затем я попытался включить события ON в phpMyAdmin, но опять же, находясь на общем хосте, это не было. Извините fancyPants.
Поэтому я обратился к встраиванию SQL-скрипта в файл PHP. Я использовал пример [здесь] [1]
[1]: https://www.w3schools.com/php/php_mysql_create_table.asp хранит его в подпапке где-то в безопасности и добавляет пустой index.php для хорошей меры. Затем я смог проверить, что этот PHP-файл (и мой SQL-скрипт) работает из строки URL-адреса браузера.
Все хорошо до сих пор. На CRON. Следуя приведенному выше примеру, почти сработало. Я закончил тем, что вызвал PHP до пути для моего * .php-файла. В противном случае CRON не знал, что делать с файлом.
мой cron настроен на запуск один раз в день и выглядит так, изменен для обеспечения безопасности.
00 * * * * php mywebsiteurl.com/wp-content/themes/ForteChildTheme/php/DeleteExpiredAssessment.php
Для окончательного тестирования с CRON я изначально настроил его на запуск каждую минуту и включил оповещения по электронной почте. Это быстро подтвердило, что оно работает так, как планировалось, и я изменил его на один раз в день.
Надеюсь это поможет.