在一定时间后自动删除条目和文件

时间:2013-07-05 22:42:14

标签: php sql perl automation

我想做什么:

所以我的问题是:如何以优化的方式在24小时后自动删除条目。

您需要了解的内容:

我研究了一个解决方案,它还允许我删除与此数据库条目相关的文件。

我的想法:

我最初的想法是启动一个Perl脚本,如果最早的条目是在24小时之前创建的,它会每小时检查一次,如果是这样,那么删除条目加上与该条目关联的文件,但首先,我发现这个解决方案有点难看,我相信有比这更好的解决方案,更优化和优雅!

表:

UID, COUNT, VALUE_1, VALUE_2, ..., TIMESTAMP, LINK

如果您有任何灵感,请告诉我!

4 个答案:

答案 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作业仍无法满足您的目的,请查看此

http://php.net/manual/en/function.set-time-limit.php

答案 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作业。