目錄node
1、定時任務crond介紹... mysql
2、crond定時任務限權... linux
3、Crontab用法... sql
4、Crontab命令的書寫格式... windows
5、定時服務器時間同步... 後端
6、寫定時任務注意點..centos
7、調試定時任務... 服務器
1、定時任務crond介紹測試
1>定時任務軟件種類this
at 適合僅執行一次就結束的調度命令,須要啓動一個後端的atd服務。
crontab 須要啓動一個服務crond才行,crond服務經過crontab命令實現。
anacron 沒法週期性執行,只能以天爲週期,但有個特色,在關機狀態下未執行的任務,下次開機時能夠補上執行
注:crontab爲最經常使用的定時任務。
2>crontab工做
運行linux後,開機自啓動crond任務,系統會每分鐘檢查是否有要執行的任務工做(循環檢測)
默認系統中能夠登錄的用戶,均可以使用crontab定義計劃任務。不過,能夠經過/etc/cron.allow文件限制權限。
3>crontab支持兩種狀態:
a.直接編寫計劃任務;
b.使用目錄的方式,放在目錄裏面的都會定時執行,定時目錄可在/etc/crontab中設定。
2、crond定時任務限權
可對各用戶使用定時任務進行管理
1)拒絕用戶使用crontab任務
在/etc/cron.deny中添加要拒絕的用戶名,格式以下:
listen
nobody
noaccess
username1
username2
username3
.
2)容許用戶訪問crontab任務
在/etc/cron.allow中添加要容許的用戶名,格式以下:
root
username1
username2
.
3)按期執行一個目錄下的文件
在/etc/crontab中添加目錄,格式以下:
01 * * * * root run-parts 目錄
注:使用run-parts可定義按期執行的目錄
4)限權測試
1>添加用戶
[root@test ~]# useradd test
[root@test ~]# echo 123456 |passwd test--stdin #<==非交互模式建立密碼
Changing password for user test.
passwd: all authentication tokensupdated successfully.
2>拒絕測試
[root@test ~]# cat /etc/cron.deny
test
[root@test ~]#
[root@test ~]# su - test
[test@test ~]$ crontab -e
You (test)are not allowed to use this program (crontab)
See crontab(1) for more information
在cron.deny中加入用戶後,該用戶沒有權限編輯定時任務
3>容許測試
[root@test ~]# cat /etc/cron.allow
test
[root@test ~]# su - test
[test@test ~]$ crontab -e #<==test用戶編輯成功
*/1 * * * * echo successful >/tmp/a.log
[test@test ~]$ crontab -l
*/1 * * * * echo successful >/tmp/a.log
在cron.allow中加入用戶後,該用戶能編輯定時任務
4>清空容許用戶
[test@test ~]$ su - root
Password:
[root@test ~]# echo >/etc/cron.allow
[root@test ~]# su - test
[test@test ~]$ crontab -l #<==test用戶連查看的權限都沒有
You (test)are not allowed to use this program (crontab)
See crontab(1) for more information
[test@test ~]$ cat /etc/cron.deny
test
清空cron.allow容許用戶後,該用戶又被cron.deny拒絕,
得出結論:/etc/cron.allow優先於/etc/cron.deny配置
3、Crontab用法
[root@yang1 data]# crontab --help #<==注:crontab –l –e都是直接操做/var/spool/cron/下當前用戶名的文件
usage: crontab [-u user] file #<==指定某用戶如crontab –u yang2 –e,編輯yang2家目錄下的crontab
crontab [-u user] [ -e | -l | -r ]
(default operation is replace,per 1003.2)
-e (edit user's crontab) #<==編輯當前用戶的定時任務
-l (list user's crontab) #<==查看當前用戶的定時任務
-r (delete user's crontab) #<==刪除定時任務
-i (prompt before deletinguser's crontab) #<==刪除crontab文件內容,刪前會有提示
-s (selinux context)
注:crontab –e 編輯定時任務,退出時能夠檢查語法,直接編輯/var/spool/cron/root不能。若是大批量添加任務,則使用echo追加。
cron執行的每一項工做都會被紀錄到/var/log/cron這個日誌文件中,能夠從這個文件查看命令執行的狀態。
4、Crontab命令的書寫格式
* * * * * /bin/sh /scripts/yy.sh |
分 時 日 月 周 命令和文件路徑 |
(00-59) (0-23) (1-31) (1-12) (0-6) |
|
所用符號表示意思 |
* 星號每的意思 |
- 減號連續一段時間,如:00 17-19 * * * cmd 天天下午17點,18點,19點執行一次命令 |
, 逗號多個時間段,如:00 10-11,17-19 * * * cmd 天天的上午10,11點整,下午的17,18,19點整執行一次命令 |
/n n表明數字,指每隔n時間執行一次,如: */2 * * * * cmd 每隔2分鐘執行一次命令 |
1)舉例:
30 12-16/2 * ** cmd
天天的中午12點到下午4點間,每隔2小時執行一次
* 23-7/1 * * 25pxd
注:這是一個錯誤的命令
日和周不能同時用,若要以月爲間隔,則日或周必有一個有值
其它如:小時上有值,則分鐘上也要有值
*/1 * * ** echo yangrong >>/var/log/yy > /dev/null 2>&1
每隔一分鐘把yangrong打印到yangrong1文件中,但該命令沒法執行,由於>>與>/dev/null不可同時使用
2)/dev/null 2>&1解釋
0是標準輸入 使用<或<< |
1是標準輸出 使用>或>> |
2是標準錯誤輸出 使用2>或2>> |
>/dev/null 2>&1 即錯誤輸出與標準輸出所有重定向到空,能夠寫成1>/dev/null 2>/dev/null |
3)關於重定向的做用
重定向到空能夠避免碎片文件佔用inode資源
重定向到一個指定log裏,能夠看任務是否執行
4)關於致使磁盤inode滿狀況分析
定時任務執行成功or失敗時,程序會向上層發送mail,因爲平時工做中不打開sendmail功能,因此郵件會存儲在臨時目錄/var/spool/clientmqueue,隨着執行的任務次數多,文件也會愈來愈多,直到某一天,添加文件時,提示No space left on device,主要問題緣由不在於垃圾文件會佔很大空間,而在於每一個文件會佔用inode節點。(centos6.4默認不裝sendmail,可能不會致使這個問題發生)。
因此crontab規則後需加 /dev/null 2>&1。
注:>> 與 >/dev/null 2>&1不可同時存在,否則沒法執行
5)重啓crond服務
/etc/init.d/crond status #查看當前運行狀態
/etc/init.d/crond restart #重啓
/etc/init.d/crond reload #平滑重啓
5、定時服務器時間同步
1)手動同步
[root@yang1 data]# which ntpdate
/sbin/ntpdate
[root@yang1 data]# /sbin/ntpdate time.windows.com
2)自動同步(使用定時任務)
#sync systime by yangrong at 2013-9-4
*/5 * * * * /sbin/ntpdate time.windows.com>/dev/null 2>&1
注:當局域網內的服務器足夠多時(500+),則需本身在局域網搭建ntp server
6、寫定時任務注意點:
掌握了下面7點,寫定時任務就不在犯錯。
序號 |
注意點 |
1 |
每一個任務添加註釋,誰寫的,什麼時間寫的,完成什麼需求? |
2 |
執行腳本使用/bin/sh(防止腳本無執行權限),要執行的文件路徑是從根開始的絕對路徑(防止找不到文件) |
3 |
儘可能把要執行的命令放在腳本里,而後把腳本放在定時任務裏。對於調用腳本的定時任務,能夠把標準輸出錯誤輸出重定向到空。 |
4 |
定時任務中帶%沒法執行,須要加\轉義 |
5 |
若是時上有值,分鐘上必須有值 |
6 |
日和周不要同時使用,會衝突 |
7 |
>>與>/dev/null 2>&1不要同時存在 |
書寫舉例:
#backup mysql byyangrong at 2013-9-4
30 4 * * * /bin/shtar_mysql.sh >/dev/null 2>&1
7、調試定時任務
一個任務不能輕易的直接推上線上服務器,須要在測試服務器上測試好。
序號 |
調試方法 |
1 |
增長頻率調試任務,如:生產環境2小時一次,測試機2分鐘一次 |
2 |
加快時間調試任務,如:生產環境1天后執行,則添加任務後修改設備時間 |
3 |
重定向到一個日誌裏,查看任務執行狀況。一個是定時任務後加log,一個是腳本後加log |
4 |
環境變量可能致使問題 |
5 |
經過日誌定位問題。 tail /var/log/cron |