定時任務

 

 


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
張賀,多年互聯網行業工做經驗,擔任過網絡工程師、系統集成工程師、LINUX系統運維工程師
我的網站:www.zhanghehe.cn
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-nginx


定時任務

一、計劃任務基本概述

什麼是crond?shell

crond服務就是用來執行計劃任務的服務,類型於鬧鐘,定點執行。vim

爲何用crondbash

作週期性的任務,減小人力成本,好比凌晨三點備份數據,12點打開搶購入口等。網絡

計劃任務爲分兩種:運維

系統級別的定時任務:無需人工干預,做用是用於文件的清理、日誌的切割、系統信息的採集。ide

用戶級別的定時任務:運維人員進行定義。網站

二、格式(分、時、日、月、周)

/etc/crontab文件裏面記載了定時任務書寫的格式,格式就是:分、時、日、月、周this

* 表示每,默認每一位上都是*,好比* * * * *就表示每一分鐘。
- 表示範圍,好比0 5-7 * * *表示5點到7點這個時間段
,逗號表示分隔時間段,好比,3,6,9 * * * *表示每小時的第3分種、第6分種、第9分鐘
/1,表示每隔多少時間,若是*/10表示每隔10分鐘。
1 1 * * 6 每週6的1點1分

6 7 * * * 天天的七點六分

6 7 8 * * 每個月的8日7時6分

6 7 * * 5 這是每週5的7點6分

//當日和周同時出現時,就是而且的關係
6 7 3 * 5 每個月的三號並且還得是週五的7點6分

30-35 7 * * *天天的7點30、31、32、33、34、35各執行一次

5,35 * * * * 每一個小時的第5分和35分都執行一次任務

5,35/3 * * * * 每一個小時的5分到第35分,每隔分隔3分鐘執行一次

0  *\2  * * * 每兩個小時執行一次

00 02 * * * 天天的2點整執行

00 02 1 * * 每個月的1號2點整執行

00 02 14 2 *  表示2月14號2點整執行

00 02 * * 7  表示週日的2點整執行

00 02 * 6 5  表示6月的週五2點執行

00 02 14 * 7 表示每個月的14號或者週日的2點執行

00 02 14 2 7 表示每一年2月14號或每一年2月的週末2點執行

15 21 * * 1-5 週一到周月的21:15執行

0 23-7/1 * * * 從凌晨23點到早上7點每隔1小時執行一次

3,15 8-11 */2 * * 每隔2天,8點到11點之間的第3分鐘和第15分鐘執行

45 4 1-10 * *  每個月的1號到10號4點45執行

NOTE:「日」並非比周小,因此在設置「周」的時候「日」並不用有所體現。調試

注意事項:

給定時任務加註釋

將須要按期執行的任務寫入shell腳本中,避免直接使用命令沒法執行的狀況。

定時任務的結尾必定要有&>/dev/null 。

若是必定要用命令,命令必須使用絕對路徑。

crond如何備份?

經過查看/var/log/cron中執行的記錄,去推算任務執行的時間

定時的備份/var/spool/cron/{username}

crond如何拒絕某個用戶使用

[root@nginx ~]# echo "zhanghe" >> /etc/cron.deny 
[root@nginx ~]# useradd zhanghe
[root@nginx ~]# su - zhanghe
[zhanghe@nginx ~]$ crontab -e
You (zhanghe) are not allowed to use this program (crontab)
See crontab(1) for more information

計劃任務調度的注意點

先調整成每分鐘執行,看看效果

經過查看/var/log/cron日誌,能夠看到執行的結果,方便後續的調試。

注意環境變量的問題

命令先在終端試一試,試成功了再複製到腳本當中,儘可能少用手打。

三、計劃任務編寫實踐

經過crontab編寫cron定時任務

參數 含義
-e 編輯
-l 查看

例0:天天凌晨3點作一次備份,備份/etc/目錄到/backup下面

將備份命令寫入到一個腳本中,天天備份文件名要求格式:當前時時間_文件名_tar.gz,不輸出任何信息,存放的備分內容只存放三天的數據

[root@nginx scripts]# vim backup.sh
#!/bin/bash
tar -czf /backup/$(date +%F)_etc_tar.gz /etc/  &>/dev/null
find /backup -name *.tar.gz -mtime +3 | xargs rm -f

[root@nginx ~]# chmod +x /server/scripts/backup.sh 

root@nginx ~]# crontab -e
0 3 * * * /bin/bash /backup/backup.sh

例1:每4個小時備份一次/etc/目錄到/bakup目錄當中,保存的文件名格式爲「etc-yyyy-mm-dd-hh.tar.xz」

0    */4  * * *  /bin/tar -Jcf  /badkup/etc-`/bin/date +%F-%H`.tar.xz  /etc/*

例2:每週2,4,7備份/var/log/messages文件至至/backup目錄中,文件名形如」messages-yyyymmdd.tar,gz」

0 0 ** 2,4 ,7  /bin/tar -zcf /backup/messages-`date +\%Y\%m\%d`.tar.gz  /var/log/messages

例3:每兩個小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中

0 */2 * * *  /bin/grep "^[SM]" /proc/meminfo >> /tmp/meminfo.txt

例4:工做日時間內,每小時執行一次ip addr show 命令

0  */1 * *  1-5  /sbin/ip addr show

例5:每3分鐘執行一個echo how are you?

*/3  * * * * /bin/echo 「how are you?」           #必須是絕對路徑

例6:每週2,4,6備份/etc/目錄到backup目錄中,備份的文件名的當etc_開頭並跟上當日的日期文件名

0 0 * * 2,4,6  tar –jcf /backup/etc_`date +’%F`.tar.xz   /etc/*  #比周二小的都要有值,天並不比周二小

例7: 天天的6,9,12,15,18時查看一下當前系統掛載的文件系統,並將查看結果追加到/tmp/mounts.txt文件

0  6,9,12,15,18  * * * /bin/mount >>/tmp/mounts.txt

例8: 天天每兩個小時取當前系統內存空間餘量,將其保存到/stats/memory.txt文件下

0 */2 *** /bin/grep 「^MemFree」 >> /stats/memory.txt

四、秒級任務

怎樣使用crond運行秒級任務,想要在crond當中運行秒級任務的話,必需結果其餘的方法,好比for循環和while循環.

例1:每20秒打印hello!

***** for i in {0,1,2};do  /bin/echo 「hello!」; sleep  20 ;done

這就表明每分鐘,一分鐘到了以後i就等於0,而後就運行echo hello!運行完成以後就睡20秒,20秒睡完了,i又等於1了,而後再打印,而後再睡20秒,而後i等於3,再打印,再睡着.............從而實現每隔20秒打印一次的效果。

例2;每秒打印一次hello!

***** for i in {1..60};do  /bin/echo 「hello!」; sleep  1 ;done

解釋:一分種到了以後,i先等於1以後就echo,而後睡一秒,i又等於2了,再echo ...............,一分種有60個一秒。

相關文章
相關標籤/搜索