linux 中的計劃任務之crontab

linux中的計劃任務crontab

crontab:能夠從定時重複工做中解脫出來linux

工做中遇到的困難

  • 每分鐘須要執行一個程序檢查系統運行狀態
  • 天天凌晨須要對過去一天的業務數據進行統計
  • 每一個星期須要把日誌文件備份
  • 每一個月須要把數據庫進行備份

crontab 簡介

  • 用於設置週期性被執行的任務工具。
  • 被週期性執行的任務咱們稱爲Cron job
  • 週期性執行的任務列表稱爲Cron Table

crontab 實踐內容簡介

  • 相關工具
  • 安裝並檢查crontab服務
  • crontab的基本組成
  • crontab的配置文件格式
  • crontab工具的使用
  • crontab 的日誌
  • crontab 常見的錯誤

檢查cron服務數據庫

  • 檢查crontab工具是否安裝:crontab -l
  • 檢查crontab服務是否啓動:service crond status

安裝cronapache

  • yum install -y vixie-cron
  • yum install crontabs

案例工具

[root@xuexi-001 ~]# crontab -e
*/1 * * * * date >> /tmp/log.txt
# 每分鐘都打印當前時間到log.txt 文件中
[root@xuexi-001 ~]# tail -f /tmp/log.txt 
2018年 10月 05日 星期五 00:00:01 CST
2018年 10月 05日 星期五 00:01:01 CST
2018年 10月 05日 星期五 00:02:01 CST
# tail -f 顯示文件的最後幾行 ,tail -2 顯示文件的最後兩行

crontab 基本組成

  • crond 服務 --系統服務
  • 配置文件 --以文件方式設置定時任務
  • 配置工具 -- 用於調整定時任務

crontab 配置文件格式

  • * * * * * COMMAND
  • 第一個 * :分鐘 0-59
  • 第二個 * :小時 0-23
  • 第三個 * :日期 1-31
  • 第四個 * :月份 1-12
  • 第五個 * :星期 0-7(0或者7表明星期天)

案例命令行

  • 每晚的21:30重啓apache
30 21 * * * service httpd restart
  • 每個月的一、十、22日的4:45重啓apache
45 4 1,10,22 * * service httpd restart
  • 每個月的1到10日的4:45重啓apache
45 4 1-10 * * service httpd restart
  • 每隔兩分鐘重啓apache
*/2 * * * * service httpd restart # 偶數分鐘
1-59/2 * * * * service httpd restart # 奇數分鐘
  • 晚上11點到早上7點之間,每隔一小時重啓apache
0 23-7/1 * * * service httpd restart
  • 天天18:00到23:00之間每隔30分鐘重啓apahce
0,30 18-23 * * * service httpd restart
0-59/30 18-23 * * * service httpd restart

小結rest

  • * 表示任什麼時候候都匹配
  • 可用「A,B,C」 表示A或者B或者C時執行命令
  • 可用「A-B」表示A-B之間時執行命令
  • 可用「*/A」 表示A分鐘(小時等)執行一次命令

crontab工具的使用

crontab 選項:日誌

  • -u: define user
  • -e: edit user's crontab
  • -l: list user's crontab
  • -r: delete user's crontab

案例code

一、給root 用戶添加計劃任務:每隔兩分鐘(奇數分鐘)打印 「JISHU**********」crontab

[root@xuexi-001 ~]# crontab -e
1-59/2 * * * * echo "JISHU***********************"

二、添加普通用戶 crontester 而且添加計劃任務:每隔兩分鐘(偶數分鐘)打印「EVEN**************」it

[root@xuexi-001 ~]# useradd crontester
[root@xuexi-001 ~]# crontab -e -u crontester 
[root@xuexi-001 ~]# crontab -l -u crontester
0-58/2 * * * * echo "EVEN ************"

查看日誌

[root@xuexi-001 ~]# tail -f /var/log/cron
Oct  5 00:51:01 xuexi-001 CROND[1906]: (root) CMD (echo "JISHU***********************")
Oct  5 00:52:01 xuexi-001 CROND[1911]: (crontester) CMD (echo "EVEN ************")

crontab 配置文件

  • 全局(系統)配置文件
  • /etc/crontab
  • 注意格式

crontab 日誌

  • /var/log/cron 文件保存着cron的任務執行記錄
[root@xuexi-001 ~]# cd /var/log/
您在 /var/spool/mail/root 中有新郵件
[root@xuexi-001 log]# ls cron*
cron  cron-20180611  cron-20180926  cron-20181001
[root@xuexi-001 log]# ls -l cron*
-rw-------  1 root root 23564 10月  5 01:10 cron
-rw-------. 1 root root 10917 6月  11 21:08 cron-20180611
-rw-------. 1 root root 11543 9月  26 20:13 cron-20180926
-rw-------  1 root root  4043 10月  1 13:22 cron-20181001
[root@xuexi-001 log]# tail -f cron
Oct  5 01:04:01 xuexi-001 CROND[2001]: (crontester) CMD (echo "EVEN ************")
Oct  5 01:04:49 xuexi-001 crontab[2005]: (root) LIST (root)
Oct  5 01:04:49 xuexi-001 crontab[2005]: PAM pam_end: NULL pam handle passed
Oct  5 01:05:01 xuexi-001 CROND[2007]: (root) CMD (echo "JISHU***********************")
Oct  5 01:06:01 xuexi-001 CROND[2014]: (crontester) CMD (echo "EVEN ************")
Oct  5 01:07:01 xuexi-001 CROND[2020]: (root) CMD (echo "JISHU***********************")
Oct  5 01:08:01 xuexi-001 CROND[2026]: (crontester) CMD (echo "EVEN ************")
Oct  5 01:09:01 xuexi-001 CROND[2032]: (root) CMD (echo "JISHU***********************")

crontab 常見錯誤

  • 環境變量
  • 命令行雙引號中使用%時,未加反斜線\
  • 第三和第五個域之間執行的是「或」操做
  • 分鐘設置誤用

  • 第三和第五個域之間執行的是「或」操做

案例

  • 四月的第一個星期日早晨1時59分鐘運行a.sh
59 1 1-7 4 * test`date + \%w` -eq 0 && /root/a.sh
  • 分鐘設置誤用

案例

  • 兩小時運行一次
錯誤示例:
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date

正確示例:
0 */2 * * * date

說明

在使用分鐘的時候若是使用的分鐘時使用 * 那麼就是每兩個小時的每分鐘都會執行。正確的應該設置爲 0,還有就是在使用分鐘設置時,要注意分鐘的約束,好比1-10/2,先知足1-10之間的每兩分鐘也就是1,3,5,7,9的時候執行,在11分鐘的時候就不執行了。

相關文章
相關標籤/搜索