如何设置crontab来执行mysql查询并记录输出?

时间:2012-03-30 18:05:29

标签: mysql crontab

好吧,标题自我描述了.. 我需要运行一个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 个答案:

答案 0 :(得分:8)

好吧,因为mysql在crontab中没有正常工作(我认为这是像Alex Howansky所说的路径问题),我创建了一个处理这个查询的php文件并在crontab中调用了php,更加容易,并且让我选择使用条件。

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!";
?>

感谢您的帮助。

答案 1 :(得分:4)

在您的cron配置中执行以下操作

echo "your_SQL_statement" | mysql --skip-column-names -udbuser -pdbpassword yourdb >> yourlog.log

答案 2 :(得分:2)

我怀疑你的脚本正在运行,但实际上并没有返回任何输出。这是我当地的测试:

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

为了清楚起见,foo是一个空文件。 posts不是一张空桌子。

所以,更准确地说,我认为这是MySQL的预期行为,尽管我无法在他们的文档中证实这一点。如果您想要/需要输出,您可能需要编写一个脚本来在删除之前/之后检查您的表。

答案 3 :(得分:2)

您需要使用cronjob执行的脚本的完整路径。例如,如果mysql二进制文件的位置是 / usr / local / mysql / bin / mysql ,你可以在你的cronjob中使用它。

00 16,18,19,20,21 * * * /usr/local/mysql/bin/mysql -h MY-DB-HOST.COM -u .....