2013-07-05 65 views
0

我想要做什麼之後的條目和文件:自動刪除一定的時間

所以我的問題是:我怎麼能自動在優化的方式整整24小時後刪除條目。

你需要知道什麼:

我研究一個解決方案,也將讓我刪除關聯到這個數據庫項文件。

我的想法:

我最初的想法是啓動一個Perl腳本,它會檢查每一個小時,如果最早的條目的創建,24小時前與否,如果它這樣刪除的條目加上文件關聯到這個入口,但首先,我覺得這個解決方案有點難看,我相信有比這更好的解決方案,更優化和優雅!

表:

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

如果您有任何靈感,請告訴我!

+2

聽起來像一個cronjob工作給我 –

+0

我沒有完全得到這個問題。你有一個SQL數據庫與文件的鏈接?我的意思是你必須抓取你的數據庫舊的東西,刪除行,刪除文件。這是一個非常高的負載系統,所以它必須特別優化? – Alex

+0

對於創建的每個條目,都會創建一個文件,並且該文件的絕對鏈接位於條目中。會有很多條目。 cron作業似乎不適用,因爲如果在00:01創建條目,則cron條目將執行23無用的檢查,如果運行一小時/檢查,最差將運行一個小時到更晚 – torr

回答

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(); 
    
+0

您知道我是否可以執行文件與MySQL調度程序,你的解決方案似乎是完美的我只需要擦除相關的文件,它會! – torr

1

將你的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工作的Running cron job on linux every 6 hours

我只看到您的回覆PRPGFerret現在。你的sql條目是否有時間戳記?更頻繁地運行cron作業,讓php檢查時間戳,如果過了一個小時,請刪除條目。

如果cron作業仍然不能滿足你的目的,看看這個

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

+0

這可能是一個很好的解決方案,但是如果有例如100000條目?會有10萬個cron作業?這是很多!是不是? – torr

+0

您使用php文件中的條目,cron作業只運行該文件。所以cron作業給出了自動化,就像一個計時器,但php與sql數據交互。因此,有100000個條目可能需要一些先進的PHP腳本,但我不明白什麼其他方式將刪除您的文件,因爲像斯蒂芬R的SQL查詢不會那樣做。 – Llewellyn

1

你可以使用一個

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 
1

我想想和好,條目在一個時間順序擺放:

  • 如果進入25必須在上午12點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作業。