好吧,标题自我描述了.. 我需要运行一个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规则有什么问题吗?
答案 0 :(得分:8)
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 .....