簡介:Crontab命令常見于Unix和類Unix的操作系統(tǒng)之中印机,用于設(shè)置周期性被執(zhí)行的指令射赛。本課程通過對Crontab的介紹以及案例演示楣责,帶領(lǐng)大家學習在實際工作中通過crontab進行計劃任務(wù)設(shè)置秆麸,讓重復的任務(wù)自動化執(zhí)行,提高大家工作效率屯烦。
(Linux中的計劃任務(wù)—Crontab-慕課網(wǎng):http://www.imooc.com/learn/216)
第1章 課程背景
1-1 課程背景
@PeterZhou
CRONTAB
工作中遇到的困難
- 每分鐘需要執(zhí)行一個程序檢查系統(tǒng)運行狀態(tài)驻龟;
- 每天凌晨需要對過去一天的業(yè)務(wù)數(shù)據(jù)進行統(tǒng)計迅脐;
- 每個星期需要把日志文件備份谴蔑;
- 每個月需要把數(shù)據(jù)庫進行備份隐锭;
第2章 Crontab簡介
2-1 Crontab是什么
Crontab是一個用于設(shè)置周期性被執(zhí)行的任務(wù)的工具计贰。
- 被周期性執(zhí)行的任務(wù)我們稱為Cron Job躁倒;
- 周期性執(zhí)行的任務(wù)列表我們稱為Cron Table洒琢;
第3章 Crontab實踐
3-1 Crontab時間內(nèi)容簡介
- 相關(guān)工具
- 安裝并檢查Crontab服務(wù)
- Crontab的基本組成
- Crontab的配置文件格式
- Crontab工具的使用
- Crontab的日志
- Crontab常見錯誤
3-2 相關(guān)工具putty介紹
Putty
一個免費的易用的SSH連接工具
http://www/putty.org/
putty_zh.exe
雙擊運行,填寫主機名稱(或IP地址)(M)荧嵌,端口(P):22啦撮;連接類型:SSH赃春;打開织中,輸入密碼;
3-3 安裝并檢查Crontab服務(wù)
檢查cron服務(wù)
- 檢查Crontab工具是否安裝:crontab -l
[root@ip-172-31-17-189 ec2-user]# crontab -l
- 檢查crond服務(wù)是否啟動:service crond status
[root@ip-172-31-17-189 ec2-user]# service crond status
安裝cron - yum install vixie-cron
[root@ip-172-31-17-189 ec2-user]# yum install vixie-cron
- yum install crontabs
[root@ip-172-31-17-189 ec2-user]# yum install crontabs
3-4 案例實現(xiàn)
一個簡單的例子
- 每分鐘都打印當前日期到一個日志文件中
*/1 **** date >> /tem/log.txt
#編輯和添加計劃任務(wù)
[root@ip-172-31-17-189 ec2-user]# crontab -e
按【字母O】開始寫入
*/1 * * * * date >> /tmp/log.txt
按【ESC】停止寫入
輸入【:wq】保存并退出
[root@ip-172-31-17-189 ec2-user]# crontab -l
#不斷顯示文本文件的最后幾行內(nèi)容(動態(tài)顯示脱惰,不斷刷新)
[root@ip-172-31-17-189 ec2-user]# tail -f /tmp/log.txt
Ctrl+C退出命令
#清屏
[root@ip-172-31-17-189 ec2-user]# clear
#顯示最后幾行內(nèi)容
[root@ip-172-31-17-189 ec2-user]# tail /tmp/log.txt
#顯示最后三行內(nèi)容
[root@ip-172-31-17-189 ec2-user]# tail -3 /tmp/log.txt
3-5 Crontab的基本組成
系統(tǒng)服務(wù):CROND(每分鐘都會從配置文件刷新定時任務(wù))
配置文件:文件方式設(shè)置定時任務(wù)
配置工具:crontab(用于調(diào)整定時任務(wù))
3-6 Crontab的配置文件格式
每天18:00至23:00之間每隔30分鐘重啟apache
0,30 18-23 * * * service httpd restart
0-59/30 18-23 * * * service httpd restart
小結(jié)
- *表示任何時候都匹配采盒;
- 可以用"A,B,C"表示A或者B或者C時執(zhí)行命令磅氨;
- 可以用"A-B"表示A到B之間執(zhí)行的命令烦租;
- 可以用"*/A"表示每A分鐘(小時等)執(zhí)行一次命令叉橱;
3-7 Crontab工具的使用
- 查看某用戶的計劃任務(wù)列表窃祝;
- 修改某用戶的計劃任務(wù)踱侣;
- 查看生成的最終計劃任務(wù)文件;
/var/spool/cron
[root@ip-172-31-17-189 ec2-user]# crontab -help
[root@ip-172-31-17-189 ec2-user]# crontab -l
[root@ip-172-31-17-189 ec2-user]# crontab -e
#添加打印奇數(shù)分鐘任務(wù)
1-59/2 * * * * echo "JISHU*********************"
[root@ip-172-31-17-189 ec2-user]# crontab -l
#清屏
[root@ip-172-31-17-189 ec2-user]# clear
#添加crontester用戶
[root@ip-172-31-17-189 ec2-user]# useradd crontester
[root@ip-172-31-17-189 ec2-user]# crontab -e -u crontester
#添加打印偶數(shù)分鐘任務(wù)
0-58/2 * * * * echo "EVEN*********************"
[root@ip-172-31-17-189 ec2-user]# crontab -l -u crontester
#清屏
[root@ip-172-31-17-189 ec2-user]# clear
#查看任務(wù)進程
[root@ip-172-31-17-189 ec2-user]# tail -f /var/log/cron
按【Ctrl+C】停止
3-8 Crontab的配置文件
全局(系統(tǒng))配置文件
/etc/crontab
注意格式
Root配置文件
只有root用戶才會把這些內(nèi)容載入到計劃任務(wù)表中;
[root@ip-172-31-17-189 ec2-user]# cd /etc
[root@ip-172-31-17-189 etc]# ls cron*
[root@ip-172-31-17-189 etc]# vi crontab
*/1 * * * * root ceho "JOB IN THE /etc/corntab FILE***********************"
[root@ip-172-31-17-189 etc]# tail -f /var/log/cron
按【Ctrl+C】停止
[root@ip-172-31-17-189 etc]# ls cron*
[root@ip-172-31-17-189 etc]# cd cron.d
[root@ip-172-31-17-189 cron.d]# ls
[root@ip-172-31-17-189 cron.d]# vi crontest
*/1 * * * * crontester echo "File in /etc/cron.d/crontest*********"
[root@ip-172-31-17-189 cron.d]# tail -f /var/log/cron
按【Ctrl+C】停止
[root@ip-172-31-17-189 cron.d]# crontab -l -u crontester
[root@ip-172-31-17-189 ~]# crontab -l
[root@ip-172-31-17-189 ~]# cat /var/spool/cron/root
[root@ip-172-31-17-189 ~]# vi /var/spool/cron/root
# END of File
[root@ip-172-31-17-189 ~]# crontab -l
#查看列表
[root@ip-172-31-17-189 ~]# ls /var/spool/cron
3-9 Crontab的日志
/var/log/cron文件保存著cron的任務(wù)執(zhí)行記錄
#切換目錄
[root@ip-172-31-17-189 ~]# cd /var/log
[root@ip-172-31-17-189 log]# ls cron*
[root@ip-172-31-17-189 log]# tail -f /var/log/cron
[root@ip-172-31-17-189 log]# cat /etc/crontab
[root@ip-172-31-17-189 cron]# cd /var/spool/mail
[root@ip-172-31-17-189 mail]# pwd
[root@ip-172-31-17-189 mail]# ls
[root@ip-172-31-17-189 mail]# tail -100 root
第4章 Crontab的常見錯誤
4-1 Crontab的常見錯誤之環(huán)境變量
環(huán)境變量殴蹄;
命令行雙引號中使用%時,未加反斜線
分鐘設(shè)置誤用绑嘹;
#切換到用戶根目錄下:
[root@ip-172-31-17-189 ec2-user]# cd
~
#查看路徑工腋;
[root@ip-172-31-17-189 ~]# pwd
[root@ip-172-31-17-189 ~]# ls -a
#編輯.bash_profile文件
[root@ip-172-31-17-189 ~]# vi .bash_profile
#添加環(huán)境變量
APPDIR=/etc
export APPDIR
保存并退出
[root@ip-172-31-17-189 ~]# source .bash_profile
[root@ip-172-31-17-189 ~]# echo $APPDIR
[root@ip-172-31-17-189 ~]# crontab -e
#添加計劃任務(wù)
*/1 * * * * echo $APPDIR >> /tmp/appdir.log
#查看系統(tǒng)時間
[root@ip-172-31-17-189 ~]# date
[root@ip-172-31-17-189 ~]# tail -f /var/log/cron
【Ctrl+C】終止
[root@ip-172-31-17-189 ~]# cat /tmp/appdir.log
【計劃任務(wù)的環(huán)境變量容易出錯】
4-2 Crontab的常見錯誤之命令行操作
第三和第五個域之間執(zhí)行的是“或”操作擅腰;
- 四月的第一個星期日早晨1時59分運行a.sh
59 1 1-7 4 0 /root/a.sh
改為
59 1 1-7 4 * test
date +%w-eq 0 &&/root/a.sh
#今天是周幾
[ec2-user@ip-172-31-17-189 ~]$ date +%w
#判斷是否成功
[ec2-user@ip-172-31-17-189 ~]$ test
date +%w-eq 0
#上一個命令執(zhí)行成功與否歼争,1表示失敗沐绒,0表示成功
[ec2-user@ip-172-31-17-189 ~]$ echo $?
[ec2-user@ip-172-31-17-189 ~]$ test 1 = 0
[ec2-user@ip-172-31-17-189 ~]$ echo $?
#先判斷乔遮,判斷成功后蹋肮,執(zhí)行后面的命令
[ec2-user@ip-172-31-17-189 ~]$ test 1 = 0 && echo hello
[ec2-user@ip-172-31-17-189 ~]$ test 1 = 0 || echo hello
4-3 Crontab的常見錯誤之分鐘設(shè)置誤用
- 兩個小時運行一次
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date
改為
0 */2 * * * date
4-4 Crontab綜合案例解析
Crontab中最小只能設(shè)置到每分鐘執(zhí)行一個命令括尸,如果想每半分鐘執(zhí)行某個命令怎么做到濒翻?
- 通過shell腳本的sleep命令配合Crontab即可完成這一功能;
- date && sleep 0.5s && date
[ec2-user@ip-172-31-17-189 ~]$ date
[ec2-user@ip-172-31-17-189 ~]$ date;sleep 0.5s;date
[root@ip-172-31-17-189 ec2-user]# crontab -e
*/1 * * * * echo "*******************************************"
*/1 * * * * sleep 30s;echo "*******************************************"
[root@ip-172-31-17-189 ec2-user]# tail -f /var/log/cron
*/1 * * * * date >> /tmp/date.log
*/1 * * * * sleep 30s;date >> /tmp/date.log
[root@ip-172-31-17-189 ec2-user]# crontab -l
[root@ip-172-31-17-189 ec2-user]# tail -f /var/log/cron
[root@ip-172-31-17-189 ec2-user]# tail -f /tmp/date.log