使用crontab定時執行腳本
cron服務是一個定時執行的服務,可以通過crontab 命令添加或者編輯需要定時執行的任務:
crontab –e : 修改 crontab 文件,如果文件不存在會自動創建。
crontab –l : 顯示 crontab 文件。
crontab -r : 刪除 crontab 文件。
crontab -ir : 刪除 crontab 文件前提醒用戶。
執行以上命令的時候,若遇到“crontab command not found”錯誤,這是因為軟件包沒有安裝
在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行也是可以的。
