我想做什么:
所以我的问题是:如何以优化的方式在24小时后自动删除条目。
您需要了解的内容:
我研究了一个解决方案,它还允许我删除与此数据库条目相关的文件。
我的想法:
我最初的想法是启动一个Perl脚本,如果最早的条目是在24小时之前创建的,它会每小时检查一次,如果是这样,那么删除条目加上与该条目关联的文件,但首先,我发现这个解决方案有点难看,我相信有比这更好的解决方案,更优化和优雅!
表:
UID, COUNT, VALUE_1, VALUE_2, ..., TIMESTAMP, LINK
如果您有任何灵感,请告诉我!
答案 0 :(得分:3)
您可以使用MySQL的event scheduler:
在过期时自动删除这些记录:
CREATE EVENT delete_expired_101
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR DO
DELETE FROM my_table WHERE id = 101;
定期自动清除所有过期记录:
CREATE EVENT delete_all_expired
ON SCHEDULE EVERY HOUR DO
DELETE FROM my_table WHERE expiry < NOW();
答案 1 :(得分:1)
在php文件中编写sql查询,然后在该文件上设置cron作业。
cPanel,因为此功能内置且易于使用
http://docs.cpanel.net/twiki/bin/view/AllDocumentation/CpanelDocs/CronJobs
要运行的命令看起来像这样
0 0 * * * /usr/bin/lynx http://www.yourdomain.com/thefilexxx.php >/dev/null 2>&1
如果你没有cPanel,请看看这个
http://www.wikihow.com/Set-up-a-Crontab-File-on-Linux
cron job Running cron job on linux every 6 hours
的另一篇相关帖子我现在才看到你对PRPGFerret的回复。你的sql条目有时间戳吗?更频繁地运行cron作业并让php检查时间戳,如果超过一小时,则删除该条目。
如果cron作业仍无法满足您的目的,请查看此
答案 2 :(得分:1)
您可以使用
at
工作
因此,当您最初加载完毕后24小时开火时,您可以设置工作。
xxx:~ $ echo 'ps -ef |grep atd' > x
xxx:~ $ at -f x now + 1 day
job 4 at Sun Jul 7 09:08:00 2013
xxx:~ $ at -l 4
4 Sun Jul 7 09:08:00 2013
xxx:~ $ at -c 4
#!/bin/sh
# atrun uid=501 gid=20
# mail xxxx 0
umask 22
GRAILS_HOME=/usr/share/grails; export GRAILS_HOME
<more environment>
_=/usr/bin/at; export _
cd /Users/xxx || {
echo 'Execution directory inaccessible' >&2
exit 1
}
OLDPWD=/Users/xxx; export OLDPWD
ps -ef |grep atd
答案 3 :(得分:1)
我已经考虑过这一点,并且这些条目按时间顺序排列:
如果必须在00:01删除条目25,则条目26将在同一时间或00:01 am之后删除。
我不想为每个条目创建一个cron作业,因为我知道会有很多条目。
我的想法是假设脚本至少会检查一次以获取条目的时间戳及其ID。
我知道这可能不是最优化的方式,但我想分享这个观点。
想法:
Get the ID and TIMESTAMP of entry e
(TIMESTAMP+24) - TIMESTAMP -> Set a cron job to erase the file and remove the entry
and start this script for entry e+1 (identified by id + 1)
因此,每个条目将有一个cron作业,但我们只能有一个cron作业。