我想做的事:
所以我的问题是:如何以优化的方式在 24 小时后自动删除条目。
你需要知道的:
我研究了一个解决方案,该解决方案还允许我删除与此数据库条目关联的文件。
我的想法:
我最初的想法是启动一个 Perl 脚本,如果最早的条目是在 24 小时前创建的,它将每小时检查一次丑陋,我相信有比这个更好的解决方案,更优化和优雅!
桌子:
UID, COUNT, VALUE_1, VALUE_2, ..., TIMESTAMP, LINK
如果你有什么灵感请告诉我!
我想做的事:
所以我的问题是:如何以优化的方式在 24 小时后自动删除条目。
你需要知道的:
我研究了一个解决方案,该解决方案还允许我删除与此数据库条目关联的文件。
我的想法:
我最初的想法是启动一个 Perl 脚本,如果最早的条目是在 24 小时前创建的,它将每小时检查一次丑陋,我相信有比这个更好的解决方案,更优化和优雅!
桌子:
UID, COUNT, VALUE_1, VALUE_2, ..., TIMESTAMP, LINK
如果你有什么灵感请告诉我!
你可以使用 MySQL 的事件调度器:
到期时自动删除此类记录:
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();
将您的 sql 查询写入一个 php 文件,然后在该文件上设置一个 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 作业在 Linux 上每 6 小时运行一次 cron 作业相关的帖子
我现在才看到你对 PRPGFerret 的回复。您的 sql 条目是否有时间戳?更频繁地运行 cron 作业并让 php 检查时间戳,如果一个小时过去了,则删除该条目。
如果 cron 作业仍然不能满足您的目的,请查看此
你可以使用一个
at
工作
因此,当您最初加载整体以在 24 小时后触发时,您可以做的是设置 at 作业。
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
我已经考虑过了,嗯,这些条目是按时间顺序排列的:
如果条目 25 必须在上午 00:01 删除,则条目 26 将在同一时间或上午 00:01 之后删除。
我不想为每个条目创建一个 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 作业。