Linux中的計(jì)劃任務(wù)之Crontab

簡(jiǎn)介:Crontab命令常見(jiàn)于Unix和類Unix的操作系統(tǒng)之中,用于設(shè)置周期性被執(zhí)行的指令。本課程通過(guò)對(duì)Crontab的介紹以及案例演示,帶領(lǐng)大家學(xué)習(xí)在實(shí)際工作中通過(guò)crontab進(jìn)行計(jì)劃任務(wù)設(shè)置,讓重復(fù)的任務(wù)自動(dòng)化執(zhí)行,提高大家工作效率。

(Linux中的計(jì)劃任務(wù)—Crontab-慕課網(wǎng):http://www.imooc.com/learn/216)

第1章 課程背景

1-1 課程背景

@PeterZhou
CRONTAB

工作中遇到的困難

  • 每分鐘需要執(zhí)行一個(gè)程序檢查系統(tǒng)運(yùn)行狀態(tài);
  • 每天凌晨需要對(duì)過(guò)去一天的業(yè)務(wù)數(shù)據(jù)進(jìn)行統(tǒng)計(jì);
  • 每個(gè)星期需要把日志文件備份;
  • 每個(gè)月需要把數(shù)據(jù)庫(kù)進(jìn)行備份;

第2章 Crontab簡(jiǎn)介

2-1 Crontab是什么

Crontab是一個(gè)用于設(shè)置周期性被執(zhí)行的任務(wù)的工具。

  • 被周期性執(zhí)行的任務(wù)我們稱為Cron Job;
  • 周期性執(zhí)行的任務(wù)列表我們稱為Cron Table;

第3章 Crontab實(shí)踐

3-1 Crontab時(shí)間內(nèi)容簡(jiǎn)介

  • 相關(guān)工具
  • 安裝并檢查Crontab服務(wù)
  • Crontab的基本組成
  • Crontab的配置文件格式
  • Crontab工具的使用
  • Crontab的日志
  • Crontab常見(jiàn)錯(cuò)誤

3-2 相關(guān)工具putty介紹

Putty
一個(gè)免費(fèi)的易用的SSH連接工具
http://www/putty.org/
putty_zh.exe
雙擊運(yùn)行,填寫主機(jī)名稱(或IP地址)(M),端口(P):22;連接類型:SSH;打開(kāi),輸入密碼;

3-3 安裝并檢查Crontab服務(wù)

檢查cron服務(wù)

  • 檢查Crontab工具是否安裝:crontab -l
    [root@ip-172-31-17-189 ec2-user]# crontab -l
  • 檢查crond服務(wù)是否啟動(dòng):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 案例實(shí)現(xiàn)

一個(gè)簡(jiǎn)單的例子

  • 每分鐘都打印當(dāng)前日期到一個(gè)日志文件中
    */1 **** date >> /tem/log.txt
    #編輯和添加計(jì)劃任務(wù)
    [root@ip-172-31-17-189 ec2-user]# crontab -e
    按【字母O】開(kāi)始寫入
    */1 * * * * date >> /tmp/log.txt
    按【ESC】停止寫入
    輸入【:wq】保存并退出
    [root@ip-172-31-17-189 ec2-user]# crontab -l
    #不斷顯示文本文件的最后幾行內(nèi)容(動(dòng)態(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(每分鐘都會(huì)從配置文件刷新定時(shí)任務(wù))
配置文件:文件方式設(shè)置定時(shí)任務(wù)
配置工具:crontab(用于調(diào)整定時(shí)任務(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é)

  • *表示任何時(shí)候都匹配;
  • 可以用"A,B,C"表示A或者B或者C時(shí)執(zhí)行命令;
  • 可以用"A-B"表示A到B之間執(zhí)行的命令;
  • 可以用"*/A"表示每A分鐘(小時(shí)等)執(zhí)行一次命令;

3-7 Crontab工具的使用

  • 查看某用戶的計(jì)劃任務(wù)列表;
  • 修改某用戶的計(jì)劃任務(wù);
  • 查看生成的最終計(jì)劃任務(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ù)進(jìn)程
    [root@ip-172-31-17-189 ec2-user]# tail -f /var/log/cron
    按【Ctrl+C】停止

3-8 Crontab的配置文件

全局(系統(tǒng))配置文件
/etc/crontab
注意格式
Root配置文件
只有root用戶才會(huì)把這些內(nèi)容載入到計(jì)劃任務(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的常見(jiàn)錯(cuò)誤

4-1 Crontab的常見(jiàn)錯(cuò)誤之環(huán)境變量

環(huán)境變量;
命令行雙引號(hào)中使用%時(shí),未加反斜線
分鐘設(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
#添加計(jì)劃任務(wù)
*/1 * * * * echo $APPDIR >> /tmp/appdir.log
#查看系統(tǒng)時(shí)間
[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
【計(jì)劃任務(wù)的環(huán)境變量容易出錯(cuò)】

4-2 Crontab的常見(jiàn)錯(cuò)誤之命令行操作

第三和第五個(gè)域之間執(zhí)行的是“或”操作;

  • 四月的第一個(gè)星期日早晨1時(shí)59分運(yùn)行a.sh
    59 1 1-7 4 0 /root/a.sh
    改為
    59 1 1-7 4 * testdate +%w-eq 0 &&/root/a.sh
    #今天是周幾
    [ec2-user@ip-172-31-17-189 ~]$ date +%w
    #判斷是否成功
    [ec2-user@ip-172-31-17-189 ~]$ testdate +%w-eq 0
    #上一個(gè)命令執(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的常見(jiàn)錯(cuò)誤之分鐘設(shè)置誤用

  • 兩個(gè)小時(shí)運(yùn)行一次
    * 0,2,4,6,8,10,12,14,16,18,20,22 * * * date
    改為
    0 */2 * * * date

4-4 Crontab綜合案例解析

Crontab中最小只能設(shè)置到每分鐘執(zhí)行一個(gè)命令,如果想每半分鐘執(zhí)行某個(gè)命令怎么做到?

  • 通過(guò)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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Linux定時(shí)任務(wù)Crontab命令詳解 linux 系統(tǒng)則是由 cron (crond) 這個(gè)系統(tǒng)服務(wù)來(lái)控制的。...
    孫燕超閱讀 1,898評(píng)論 0 4
  • 一、簡(jiǎn)介 crond是Linux下用來(lái)周期執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程,當(dāng)安裝完成操作系統(tǒng)后,默認(rèn)...
    人在碼途閱讀 1,100評(píng)論 0 3
  • Linux 系統(tǒng)提供了使用者控制計(jì)劃任務(wù)的命令 :crontab 命令。 一、crond簡(jiǎn)介 crond是linu...
    happeace閱讀 1,882評(píng)論 0 53
  • 前一天學(xué)習(xí)了 at 命令是針對(duì)僅運(yùn)行一次的任務(wù),循環(huán)運(yùn)行的例行性計(jì)劃任務(wù),linux系統(tǒng)則是由 cron (cro...
    Zcclucky閱讀 623評(píng)論 0 0
  • Linux 系統(tǒng)命令及其使用詳解( 大全) 名稱: cat 使用權(quán)限:所有使用者 使用方式:cat [-AbeEn...
    小向資源網(wǎng)閱讀 1,586評(píng)論 0 3

友情鏈接更多精彩內(nèi)容