Как я могу установить crontab для выполнения MySQL запроса и записи выходных данных? - PullRequest
4 голосов
/ 30 марта 2012

Ну, само название описывает это .. Мне нужно запустить функцию sql для очистки некоторых дублированных сообщений, мне нужно делать это несколько раз в день, поэтому мне нужно использовать cron ...

Я установил новое задание crontab, например:

00 16,18,19,20,21 * * * mysql -h MY-DB-HOST.COM -u MY-DB-USERNAME -pMY-DB-PASSWORD -e "delete from hotaru_posts where post_id in ( select post_id from ( select post_id from hotaru_posts a group by post_title having count(post_title) > 1 ) b )" >> /tmp/cron_job.log

но, похоже, ничего не зарегистрировано, поэтому я предположил, что оно не работает.

С предложением sql проблем нет, здесь не проблема.

Что-то не так с моим правилом cron?

Ответы [ 4 ]

8 голосов
/ 02 апреля 2012

хорошо, поскольку mysql не работал должным образом непосредственно внутри crontab (мне казалось, что это проблема с путями, как сказал Алекс Ховански), я создал php-файл, отвечающий на этот запрос, и назвал php в crontab, гораздо проще, идайте мне возможность использовать условия.

задание cron:

00 8,14,18,19,20,21,23 * * * /usr/local/bin/php /home/aikaforum/cata/public_html/cron_dup.php >> /cata/tmp/cron_dup.log 

php:

<?php
$username="xxxxxxx";
$password="xxxxxx";
$dbname="xxxxxx";
$dbhost="xxxxx.xxxxx.com";
$query="delete from hotaru_posts where post_id in ( select post_id from ( select post_id from hotaru_posts a group by post_title having count(post_title) > 1 ) b )";
mysql_connect($dbhost,$username,$password);
@mysql_select_db($dbname) or die(strftime('%c')." Unable to select database");
mysql_query($query);
mysql_close();
echo strftime('%c')." ok!";
?>

Спасибо за помощь.

4 голосов
/ 07 октября 2013

выполните следующее в ваших настройках cron

echo "your_SQL_statement" | mysql --skip-column-names -udbuser -pdbpassword yourdb >> yourlog.log
2 голосов
/ 18 мая 2013

Вам необходимо использовать полный путь к скриптам, выполняемым cronjob.Например, если местоположение бинарного файла mysql - / usr / local / mysql / bin / mysql , вы бы использовали это в своей хронологии.

00 16,18,19,20,21 * * * /usr/local/mysql/bin/mysql -h MY-DB-HOST.COM -u .....
2 голосов
/ 30 марта 2012

Я подозреваю, что ваш скрипт работает, но фактически не возвращает никакого вывода.Вот мой локальный тест:

 mysql -u username dbname -e "delete from posts" > foo             
 cat foo
 (empty file) 

Для ясности, foo - пустой файл.posts не была пустой таблицей.

Итак, чтобы быть более точным, я думаю, что это ожидаемое поведение MySQL здесь, хотя я не могу подтвердить это в их документах.Если вы хотите / нуждаетесь в выводе здесь, вам, вероятно, потребуется написать скрипт для проверки вашей таблицы перед / после удаления.

...