linux定時清理數據庫過期記錄


cron服務是Linux的內置服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:

/sbin/service crond start//沒打開的話首先要打開。
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload

以上1-4行分別為啟動、停止、重啟服務和重新加載配置。

要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可

查看當前用戶的crontab,輸入 crontab -l

編輯crontab,輸入 crontab -e

刪除crontab,輸入 crontab -r

添加任務

crontab -e  //執行之后會打開一個文件。在文件中追加如下內容即可。 0 */1 * * * command
0 */2 * * * command

 

查詢任務是否加了:

crontab -l -u root #查看root用戶
0 */1 * * * command
0 */2 * * * command

 

基本格式 :

*  *  *  *  *  command

分 時 日 月 周 命令

第1列表示分鍾1~59 每分鍾用*或者 */1表示

第2列表示小時1~23(0表示0點)

第3列表示日期1~31

第4列表示月份1~12

第5列標識號星期0~6(0表示星期天)

第6列要運行的命令

crontab文件的一些例子(博主會在此處不定時增加例子):

  1. 每10分鍾執行一個shell腳本。
    */10 * * * * /home/tmp/clear.sh

      */10表示每10分鍾執行。

    但是,有一個問題,就是,如果你想通過定時任務來調用執行***.php,那么,就可以這么寫。

    */10 * * * * /usr/local/php/bin/php /home/shells/clearOutOfDate.php

    上面這句話是可以定時運行的。我測試過。如果不行,請使用chmod 744 ***.php修改你的文件可執行權限(rwx的x一定要有,如果是root用戶的話)。不行的話,可以提升權限至777再試試

    我想說的問題是:如果你把

    /usr/local/php/bin/php /home/shells/clearOutOfDate.php

    這句話放在shell腳本里面,比如這樣,

    我自己也調了很久,但是這句話就是不會被執行。echo "你好啊"這句話是可以輸出。找不到問題在哪里。所以建議大家在crontab定時執行php文件的時候,直接在

    crontab -e 里面寫

    */1 * * * * /usr/local/php/bin/php /home/shells/clearOutOfDate.php

     就好了。另外注意 php  /home/shells/clearOutOfDate.php是不能執行的。對於php的可執行文件要寫全絕對路徑。一般都會在/usr/local/php/bin/php目錄下,可以找一找。

  2. (2018-1-11日更)定時每個月處理一下日志文件。可以先看我的bash 命令:

    #!/bin/bash
    
    cp success.log success/$(date +%Y-%m-%d).log
    cp error.log error/$(date +%Y-%m-%d).log
    cp login.log login/$(date +%Y-%m-%d).log
    
    echo "---------------------------" > success.log
    echo "---------------------------" > error.log
    echo "---------------------------" > login.log

    應用會產生日志對吧?但是我們一年下來總把日志追加在一個文件的話,文件越來越大。每次定時讀寫也是非常耗費內存的。所以,我們需要針對日志文件的積累情況,定一個合理的時間,把日志的內容取出來,按照日期歸類。例如圖中:

    $(date +%Y-%m-%d)

    就是按照年月日來把log文件歸類。下面設置定時執行,因為我的日志產生的不是很多。每個月最多也就1M多一點。所以,我設置一下,每10天,歸檔一次log文件。這樣可以減小后期追加log的IO消耗。命令如下:

    * 3 1,15 * * /data/wwwroot/project1/wx/logs/copy.sh

    表示每個月的1號和15號的凌晨3點會執行一次。

  3. (2018-1-11日更)crontab無法做到秒級執行,最小的粒度是分鍾。不過可以變相實現秒級定時任務。
    * * * * *  "命令"

    上面的全星號,可以實現每分鍾運行。

    * * * * *   "命令"
    * * * * *  sleep 20; "命令"
    * * * * *  sleep 40; "命令"
    

      上面的三行 可以做到每20秒執行。也可以寫一個循環腳本,在腳本內進行sleep騷操作。

  4.   

 

定時任務不會執行的問題總結:

1 crond服務未啟動

crontab不是Linux內核的功能,而是依賴一個crond服務,這個服務可以啟動當然也可以停止。如果停止了就無法執行任何定時任務了,解決的方法是打開它:

crond

service crond start

如果提示crond命令不存在,可能被誤刪除了,CentOS下可以通過這個命令重新安裝:

yum -y install crontabs

2 權限問題

比如:腳本沒有x執行權限,解決方法:

增加執行權限,或者用bash abc.sh的方法執行

3 路徑問題

有的命令在shell中執行正常,但是在crontab執行卻總是失敗。有可能是因為crontab使用的sh未正確識別路徑,比如:以root身份登錄shell后執行一個/root/test.sh,只要執行

./test.sh

就可以了。但是在crontab中,就會找不到這個腳本,比如寫完整:

/root/test.sh

4 時差問題

因為服務器與客戶端時差問題,所以crontab的時間以服務器時間為准。

5 變量問題

有時候命令中含有變量,但crontab執行時卻沒有,也會造成執行失敗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM