定時任務crond介紹 crond是什麼? crond是linux系統中用來定期執行命令或指定程式任務的一種服務或軟體。一般情況下,安裝完CentOS5/6 linux操作系統之後,預設便會啟動crond任務調度服務。crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作。如果有... ...
定時任務crond介紹
crond是什麼?
crond是linux系統中用來定期執行命令或指定程式任務的一種服務或軟體。一般情況下,安裝完CentOS5/6 linux操作系統之後,預設便會啟動crond任務調度服務。crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作。如果有便會根據其預先設定的定時任務規則自動執行該定時任務工作。
特殊需求crond服務不能滿足要求,一般工作中寫腳本守護程式執行。
為什麼要使用crond定時任務?
例如:我們的資料庫或者代碼程式需要每天晚上0點做一次全備,這樣每天夜裡都需要執行的周期性的工作。這就是linux系統的定時任務crond。實時備份,定時備份。
linux系統crond的定時任務
linux系統中定時任務調度的工作可以分為以下兩種情況:
1、linux系統自身定期執行的任務工作:系統周期性自行執行的任務工作,如輪詢系統日誌、備份系統數據、清理系統緩存等,這些任務無需我們人為干預。
- #系統的日誌
- [root@oldboy ~]# ls -l /var/log/messages*
- -rw------- 1 root root 598574 Dec 27 09:33 /var/log/messages
- -rw-------. 1 root root 292975 Dec 24 19:11 /var/log/messages-20161224
- -rw------- 1 root root 80222 Dec 25 10:05 /var/log/messages-20161225
- #安全文件
- [root@oldboy ~]# ls -l /var/log/secure*
- -rw------- 1 root root 11027 Dec 27 09:06 /var/log/secure
- -rw-------. 1 root root 5899 Dec 24 18:29 /var/log/secure-20161224
- -rw------- 1 root root 826 Dec 25 09:02 /var/log/secure-20161225
系統自動輪詢任務的設置配置路徑
- [root@oldboy ~]# cd /etc/logrotate.d
- [root@oldboy logrotate.d]# cat syslog
- /var/log/cron
- /var/log/maillog
- /var/log/messages
- /var/log/secure
- /var/log/spooler
- {
- sharedscripts
- postrotate
- /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
- endscript
- }
部分公司可能會放在/etc/corntab。
- [root@oldboy ~]# cat /etc/crontab
- SHELL=/bin/bash
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- MAILTO=root
- HOME=/
- # For details see man 4 crontabs
- # Example of job definition:
- # .---------------- 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
crond相關文件
- [root@oldboy ~]# ls -l /etc/|grep cron
- -rw-------. 1 root root 541 Nov 23 2013 anacrontab
- drwxr-xr-x. 2 root root 4096 Dec 16 22:09 cron.d
- drwxr-xr-x. 2 root root 4096 Dec 16 22:10 cron.daily
- -rw-------. 1 root root 0 Nov 23 2013 cron.deny
- drwxr-xr-x. 2 root root 4096 Dec 16 22:08 cron.hourly
- drwxr-xr-x. 2 root root 4096 Dec 16 22:09 cron.monthly
- -rw-r--r--. 1 root root 457 Sep 27 2011 crontab
- drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.weekly
2、用戶執行的任務工作,某個用戶或系統管理員定期要做的任務工作,例如每隔5分鐘和互聯網上時間伺服器進行時間同步,每天晚上0點備份網站站點數據及資料庫數據,一般這些工作需要每個用戶自行設置。
編輯定時任務:crontab -e
顯示定時任務:crontab -l
- [root@oldboy ~]# crontab -l
- */5 * * * * /use/sbin/ntpdate time.nist.gov >/dev/null 2>&1
linux系統下定時任務軟體種類
linux系統下的定時任務軟體,例如at、crontab、anacron。
at:適合僅執行一次就結束的調度任務命令,例如:某天晚上需要處理一個任務,僅僅是這一天的晚上,屬於突發性的工作任務。要執行at命令,還需要啟動一個名為atd的服務才行。工作中很少用到。
- [root@oldboy ~]# chkconfig --list|grep atd
- atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
crontab:可以周期性的執行任務工作,例如:每五分鐘做一次伺服器時間同步。要執行crontab這個命令,需要啟動一個服務crond才行,這個crontab命令工作中最常使用。
- [root@oldboy ~]# chkconfig --list|grep crond
- crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
anacron:這個命令主要用於非7*24小時開機的伺服器準備的,anacron並不能指定具體時間執行任務工作,而是以天位周期或者在系統每次開機後執行的任務工作。它會檢測伺服器停機期間應該執行,但是並沒有進行的任務工作,並將該任務執行一遍。
註意:
1、crond服務是運行的程式,而crontab命令是用戶用來設置定時規則的命令。
2、crond服務是企業生產工作中最常用的重要服務,at和anacron很少使用,可以忽略。
3、幾乎每個伺服器都會用到crond服務。
crontab是特權命令
- [root@oldboy ~]# ls -l `which crontab`
- -rwsr-xr-x. 1 root root 51784 Nov 23 2013 /usr/bin/crontab
crontab語法格式中特殊符號的含義
特殊符號 | 含義 |
* | *號,表示任意時間,就是"每"的意思。例如:00 23 * * * cmd表示每月每周每日的23:00都執行cmd任務。需要註意的是,每個時間位上的*表達每,如果位上是*就是該位上時間的取值範圍,例如:小時上的*等價於00-23。 |
- | 減號,表示分隔符,表示一個時間範圍,區間段,如17-19點,每天的17,18,19點的00分執行任務。00 17-19 * * * cmd。就是17,18,19點整點分別執行的意思。 |
, | 逗號,表示分隔時段的意思。30 17,18,19 * * * /bin/sh /scripts/oldboy.sh表示每天17,18,19點的半點時刻執行/scripts/oldboy.sh腳本。也可以和"-"結合使用,例如:30 3-5,17-19 * * * /bin/sh /scripts/oldboy.sh。 |
/n | n代表數字,即"每隔n單位時間",例如:每10分鐘執行一次任務可以寫成*/10 * * * * cmd,其中*/10中的*的範圍是0-59,因此也可以寫成0-59/10 * * * * cmd。 |
書寫crontab定時任務
每分鐘答應列印一次自己的名字拼音全拼到/server/log/自己的名字命名的文件。
- [root@oldboy oldboy]# crontab -e
- #每分鐘列印自己的名字到/test/oldboy/yinshoucheng.txt
- * * * * * echo 'yinshoucheng' >> /test/oldboy/yinshoucheng.txt
- [root@oldboy oldboy]# tail -f /test/oldboy/yinshoucheng.txt
小結:
1、定時任務要加註釋
2、結尾不要有>/dev/null 2>&1
3、定向的目錄必須要存在
4、定時任務中的路徑一定要絕對路徑
5、crond服務必須開啟運行
工作中調試定時任務的方法:
1、增加執行任務頻率調試任務。
代碼發佈:個人開發環境à辦公測試環境àIDC機房測試環境àIDC正式環境(分組、灰度發佈)
2、調整系統時間調試任務(不能直接用於生產環境),保持5分鐘。
3、通過腳本日誌輸出調試定時任務。
4、註意一些任務命令帶來的問題。(>/dev/null 2>&1)
5、註意環境變數導致的定時任務故障。
6、通過crond定時任務服務日誌調試定時任務(/var/log/cron)。
crontab定時任務生產註意的問題:
1、系統環境變數問題。
2、定時任務要用絕對路徑。
3、腳本許可權問題加/bin/sh。
4、時間變數問題用反斜線\%轉義,最好用腳本。
5、>/dev/null 2>&1問題(1>/dev/null 2>/dev/null,&>/dev/null)。
6、定時任務規則之前加註釋。
7、使用腳本程式替代命令行定時任務。
8、避免不必要的程式及命令輸出(tar不使用v)。
9、切到目標目錄的上一級打包目標。
10、定時任務腳本中的程式命令儘量用全路徑(和環境變數的識別有關)。