linux下使用crontab定時執行腳本


使用crontab定時執行腳本

cron服務是一個定時執行的服務,可以通過crontab 命令添加或者編輯需要定時執行的任務:

crontab –e : 修改 crontab 文件,如果文件不存在會自動創建。 
crontab –l : 顯示 crontab 文件。 
crontab -r : 刪除 crontab 文件。
crontab -ir : 刪除 crontab 文件前提醒用戶。

 執行以上命令的時候,若遇到“crontab command not found”錯誤,這是因為軟件包沒有安裝

crontab 要安裝兩個軟件包:   
vixie-cron 及 crontabs
直接執行 
yum install vixie-cron
yum install crontabs(這句可能不需要,但是你也可試試)
即可解決.

 

在crontab文件中寫入需要執行的命令和時間,該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最后一個域是要被執行的命令。每個域之間使用空格或者制表符分隔。格式如下: 

minute hour day-of-month month-of-year day-of-week commands  
分鍾   小時   天   月   星期   要執行的命令
前面五個參數中間用空格隔開,最后是要執行的命令。

合法值為:00-59 00-23 01-31 01-12 0-6 (0 is sunday) 

除了數字還有幾個特殊的符號:"*"、"/"和"-"、","

  • *代表所有的取值范圍內的數字
  • "/"代表每的意思,"/5"表示每5個單位
  • "-"代表從某個數字到某個數字
  • ","分開幾個離散的數字

注:commands 注意以下幾點

  • 要是存在文件,要寫絕對路徑
  • 即使是打印也不會顯示在顯示屏,在后台運行,最好重定向日志

 

實例1:

(寫一個定時任務,每分鍾往test.txt文件寫入一個"good"字符串)

step1:寫cron腳本文件,命名為mytest.cron。

使用touch命令創建兩個文件,mytest.cron作為腳本文件,test.txt用來測試(作為日志打印輸出文件)。

使用vi命令編輯mytest.cron文件。寫入以下內容:

*/1 * * * * echo "good" >> /export/Domains/yy.embed.jd.com/server1/logs/test.txt   

表示每分鍾,執行一次打印命令,往test.txt文件里寫入一個

step2:添加定時任務。執行命令

crontab mytest.cron

step3:"crontab -l" 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本

step4:"service crond status"

Crontab是一個很方便的在unix/linux系統上定時(循環)執行某個任務的程序
使用cron服務,用 service crond status 查看 cron服務狀態,如果沒有啟動則 service crond start啟動它,啟動命令“service crond start”。

 

使用cat命令查看test.txt文件,結果:

 

實例2:

(本人公司測試環境磁盤較小,系統日志打印較多,時間一長,磁盤打滿,應用掛掉。針對這種情況,寫一個定時任務,定期清理測試環境的系統日志,避免日志打滿的情況出現導致應用掛掉。)

主要日志文件如下:

step1:寫cron腳本文件,命名為clearLogs.cron。

使用vi命令編輯clearLogs.cron文件。寫入以下內容:

50 23 * * * for i in `find /export/Domains/yy.embed.jd.com/server1/logs/ -name "*.log"`; do cat /dev/null >$i; done
50 23 * * * for i in `find /export/Domains/yy.embed.jd.com/server1/logs/ -name "*.out"`; do cat /dev/null >$i; done
50 23 * * * for i in `find /export/Domains/worker.embeddedins.jd.local/server1/logs/ -name "*.log"`; do cat /dev/null >$i; done
50 23 * * * for i in `find /export/Domains/worker.embeddedins.jd.local/server1/logs/ -name "*.out"`; do cat /dev/null >$i; done 

表示天的23點50分,執行4個清除命令,分別為清掉/export/Domains/yy.embed.jd.com/server1/logs目錄下所有以log結尾的文件內容、清掉/export/Domains/yy.embed.jd.com/server1/logs目錄下所有以out結尾的文件內容、清掉/export/Domains/worker.embeddedins.jd.local/server1/logs目錄下所有以log結尾的文件內容、清掉/export/Domains/worker.embeddedins.jd.local/server1/logs目錄下所有以out結尾的文件內容。

step2:添加定時任務。執行命令

crontab clearLogs.cron

step3:"crontab -l" 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本

 

 

以上便可定時清理磁盤日志文件。

實例2里一個文件中使用了多個定時、多個命令,使用crontab執行多個命令時,還有很多其他寫法。比如只寫一個定時,后面的命令寫在一行,命令與命令之間用“;”分號隔開。例如實例2中的每一行命令,其實是3個命令寫在一起。把上述12個命令全部寫1行也是可以的。

 


免責聲明!

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



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