每天一個linux命令9之crontab 定時任務


     crond 是linux用來定期執行程序的命令。當安裝完成操作系統之后,默認便會啟動此  任務調度命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。

1語法
     *  *  *  *  *  command  
     分 時 日 月 周 命令  
     第1列表示分鍾1~59 每分鍾用*或者 */1表示  
     第2列表示小時1~23(0表示0點)  
     第3列表示日期1~31  
     第4列表示月份1~12  
     第5列標識號星期0~6(0表示星期天)  
     第6列要運行的命令 
2例子
    30  21 *  *  *  /usr/local/etc/rc.d/lighttpd restart  
    每晚的21:30重啟apache。 
    
    45  4  1,10,22  *  *  /usr/local/etc/rc.d/lighttpd restart 
    每月1、10、22日的4 : 45重啟apache。 
    
    10 1  *  *  6,0  /usr/local/etc/rc.d/lighttpd restart 
    每周六、周日的1 : 10重啟apache。 

    0,30  18-23  *  *  *  /usr/local/etc/rc.d/lighttpd restart 
    每天18 : 00至23 : 00之間每隔30分鍾重啟apache。 

    0 23  *  *  6  /usr/local/etc/rc.d/lighttpd restart 
    每星期六的11 : 00 pm重啟apache。 

    0  */1  *  *  *  /usr/local/etc/rc.d/lighttpd restart 
    每一小時重啟apache 

    0 23-7/1  *  *  *  /usr/local/etc/rc.d/lighttpd restart 
    晚上11點到早上7點之間,每隔一小時重啟apache 

3命令
    crontab -l :列出用戶目前的定時任務
    crontab -r : 刪除目前的時程表 
    crontab -e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI.
    
   /sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置    
    
        你也可以將這個服務在系統啟動的時候自動啟動:
 
在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crond start
 
 4新增調度任務
    方式1:在命令行輸入: crontab -e 然后添加相應的任務,wq存盤退出      
                 推薦自定義的任務使用crontab -e命令添加,退出后用/etc/init.d/crond restart命令重啟crond進程,官方文件說不用重啟進程,但我遇到不重啟無法運行任務的情況。
      方式2:編輯/etc/crontab文件
                  cron服務每分鍾不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab 因此我們配置這個文件也能運用cron服務做一些事情。用crontab配置是針對某個用戶                的,而編輯/etc/crontab是針對系統的任務。此文件的文件格式是:
 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號
HOME=/      //使用者運行的路徑,這里是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly內的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的腳本
 
大家注意"run-parts"這個參數了,如果去掉這個參數的話,后面就可以寫要運行的某個腳本名,而不是文件夾名了。


5后台執行命令

* * * * * command &

當在前台運行某個作業時,終端被該作業占據;而在后台運行作業時,它不會占據終端。可以使用&命令把作業放到后台執行。在后台運行作業時要當心:需要用戶交互的命令不要放在后台執行,因為這樣你的機器就會在那里傻等。

可以把輸出接口放到某一個溫江中

2>&1表示所有的標准輸出和錯誤輸出都將被重定向到一個叫做log.file 的文件中

command >log.file 2>&1 &


3. 系統級任務調度與用戶級任務調度
系統級任務調度主要完成系統的一些維護操作,用戶級任務調度主要完成用戶自定義的一些任務,可以將用戶級任務調度放到系統級任務調度來完成(不建議這么做),但是反過來卻不行,root用戶的任務調度操作可以通過“crontab –uroot –e”來設置,也可以將調度任務直接寫入/etc/crontab文件,需要注意的是,如果要定義一個定時重啟系統的任務,就必須將任務放到/etc/crontab文件,即使在root用戶下創建一個定時重啟系統的任務也是無效的。


個人工作案例
    定期刪除文件夾下10天前的日志
    1編寫腳本 clearlog.sh
            find /data/web/tomcat_lianyun/log/*.log.* -ctime +10|xargs rm -f 
    2添加到定時任務中
            crontab -e
                30 8 * * * /data/web/tomcat_lianyun/clearlog.sh 
            wq保存退出即可(如果未執行,記得重啟服務即可)










免責聲明!

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



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