2021-05-12 14:32:11
Linux crond定時任務
第1章 Crond是什麼?
Crond是linux系統用來定期執行命令或指定程式任務的一種服務或軟體。一般情況下,我們安裝完CentOS5/6linux作業系統之後,預設便會啟動Crond任務排程服務。Crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作。如果有,便會根據其預先設定的定時任務規則自動執行該定時任務工作。這個Crond定時任務服務就相當於我們早上使用的鬧鐘一樣。
第2章 Linux系統crond的定時任務
linux系統中定時任務排程的工作可以分為以下兩種情況:
1、 linux系統自身定期執行的任務工作:系統周期性自行執行的任務工作,如輪詢系統紀錄檔、備份系統資料、清理系統快取等,這些任務無須我們人為干預。例如:
[root@web01 ~]# ll /var/log/messages*
-rw------- 1 root root 585506 1月 24 21:32 /var/log/messages
-rw------- 1 root root 495226 12月 13 14:41 /var/log/messages-20151213
-rw------- 1 root root 501046 12月 20 10:33 /var/log/messages-20151220
-rw------- 1 root root 333767 12月 30 20:27 /var/log/messages-20151230
-rw------- 1 root root 332996 1月 10 12:19 /var/log/messages-20160110
2、使用者執行的任務工作:某個使用者或系統管理員定期要做的工作,例如每隔5分鐘和網際網路上的時間伺服器進行時間同步,每天晚上0點備份網站站點資料及資料庫資料,一般這些工作需要由使用者自己來設定。
[root@web01 ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
#* * * * * echo "yangrz" >>/server/log/yangrz
第3章 命令說明
crond服務是執行的程式,而crontab是使用者用來設定定時規則的命令。
crontab option
-l list(檢視使用者設定的定時任務)
-e 編輯定時任務組態檔
crontab –e ===vi /var/spool/cron/root
crontab –l ===cat /var/spool/cron/root
第4章 crontab語法格式中時間段的含義
段 |
含義 |
取值範圍(整數) |
第一段 |
表示分鐘 |
00-59(00也可以是0) |
第二段 |
表示小時 |
00-23 |
第三段 |
表示日、天 |
01-31 |
第四段 |
表示月份 |
01-12 |
第五段 |
表示星期、周幾 |
0-7(0和7都表示週日) |
提示:記憶口訣:分時日月周 |
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
第5章 crontab語法格式中特殊符號含義
特殊符號 |
含義 |
* |
*號表示任意時間都,實際就是“每”的意思。如:00 23 * * * cmd表示每月每週每日的23:00都執行cmd任務。 提示:定時任務如果是到小時,口述時就最多提每天。 分位上的*就等價於0-59,表示每分。 |
- |
減號,表示分隔符,表示一個時間範圍,區間段,如17-19點,每天的17,18,19點的00分執行任務。00 17-19 * * * cmd。就是17,18,19點整點分別執行的意思。 |
, |
逗號,表示分隔時段的意思。30 17,18,19 * * * /bin/sh /scripts/test.sh 表示每天17、18、19點的半點時刻執行/scripts/test.sh指令碼。 |
/n |
n代表數位,即“每個n單位時間”,例如:每10分鐘執行一次任務,可以寫成*/10 * * * * cmd,其中*/10的意思是每10分鐘執行cmd命令。 |
第6章 書寫定時任務的若干要領方法:
要領1:為定時任務規則加必要的注釋
要領2:定時任務命令或程式最好寫到指令碼裡執行
要領3:執行shell指令碼任務前加/bin/sh
要領4:定時任務命令或指令碼結尾加>/dev/null 2>&1
&>/dev/null 1>/dev/null 2>/dev/null
要領5:在指定使用者下執行相關的定時任務
要領6:生產任務程式不要隨意列印輸出資訊
tar zcf echo 123 >a.log
要領7:定時任務執行的指令碼要規範路徑(/service/scripts)
要領8:設定定時任務規範操作過程
第7章 關於設定定時任務規範操作過程
1)首先要在命令列操作成功,然後複製成功的命令到指令碼裡,在各個細小環節減少出錯的幾率。
2)然後測試指令碼,測試成功後,複製指令碼的規範路徑到定時任務設定裡,不要手敲。
3)先在測試環境測試,然後正式環境規範部署。
題:每隔2小時將系統的/etc/service檔案打包備份的/tmp下(最好每次備份成不同的包)
包袱:/etc/service是不存在的,應該是/etc/services
要cd到目標內容的上級目錄打包
打包的頻率是分,包名必須精確到分。
確保命令執行正確。然後寫到指令碼裡(複製進去)
定時任務命令或程式最好寫到指令碼裡執行。
測試指令碼正確性(定時任務怎麼寫,命令列就怎麼測試)
指令碼測試正確了,命令列的命令也要複製。
* * * * * tar zcvf /tmp/service-$(date +%F-%H)tar.gz ./services
這樣寫是不對的,在定時任務組態檔裡還得跳脫、所以要把命令寫到檔案中,避免錯誤。
題:每天晚上0點,把/tmp/services.tar.gz的包,刪除前天前的。
/var/log/cron*
這是crontab的紀錄檔,執行正確還是錯誤,紀錄檔裡邊都會有輸出。
第8章 工作中偵錯定時任務的方法:
1、 增加執行任務頻率偵錯任務(某些任務不能用於生產環境沒有測試機會)
2、 程式碼發布:個人開發環境—辦公測試環境—IDC機房測試環境—》IDC正式環境(分組,灰度發布)
3、 調整系統時間偵錯任務(不能直接用於生產環境),保持5分鐘
4、 通過指令碼紀錄檔輸出偵錯定時任務
5、 注意一些任務命令帶來的問題
6、 (*/1 * * * * * echo “==” >> /tmp/oldboy.log >dev/null 2>&1)
7、 注意環境變數導致的定時任務故障(Java)
8、 通過crond定時任務紀錄檔偵錯定時任務(/var/log/cron)
9、 把指令碼放到定時任務裡邊,很多時候取系統變數,取不到,會出問題。這時候可以在指令碼裡把系統變數重新定義一遍。
第9章 crontab定時任務生產應用問題10箴言:
1. 系統環境變數問題
2. 定時任務要用絕對路徑
3. 指令碼許可權問題,加/bin/sh
4. 時間變數問題用反斜線%跳脫,最好用指令碼
5. >/dev/null 2>&1為題(1>/dev/null 2>/dev/null ,&>/dev/null)
6. 定時任務規則之前加註釋
7. 使用指令碼程式替代命令列定時任務
8. 避免不必要的程式及命令輸出
9. 切到目標目錄的上一級打包目標
10. 定時任務指令碼中的程式命令儘量用全路徑(和環境變數的識別有關)。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-01/127826.htm
相關文章