第1章 定時任務 1.1 什麼是定時任務 相當於鬧鐘每天叫你起床 設定一個時間去做某件事 1.2 系統定時任務 [root@zeq ~]# ll -d /etc/cron* drwxr-xr-x. 2 root root 4096 Jul 10 18:24 /etc/cron.d drwxr-xr- ...
第1章 定時任務
1.1 什麼是定時任務
相當於鬧鐘每天叫你起床
設定一個時間去做某件事
1.2 系統定時任務
[root@zeq ~]# ll -d /etc/cron* drwxr-xr-x. 2 root root 4096 Jul 10 18:24 /etc/cron.d drwxr-xr-x. 2 root root 4096 Jul 10 18:24 /etc/cron.daily 系統定時任務每天運行這個目錄里的內容 drwxr-xr-x. 2 root root 4096 Jul 10 18:23 /etc/cron.hourly 系統定時任務每小時運行這個目錄里的內容 drwxr-xr-x. 2 root root 4096 Jul 10 18:24 /etc/cron.monthly 系統定時任務每月運行這個目錄里的內容 drwxr-xr-x. 2 root root 4096 Sep 27 2011 /etc/cron.weekly 系統定時任務每周運行這個目錄里的內容 -rw-------. 1 root root 0 Aug 24 2016 /etc/cron.deny 系統定時任務的黑名單 -rw-r--r--. 1 root root 457 Sep 27 2011 /etc/crontab 系統定時任務的配置文件之一
系統定時任務日誌切割 [root@zeq ~]# ll /var/log/messages* /var/log/secure* -rw------- 1 root root 1132 Aug 7 15:34 /var/log/messages -rw-------. 1 root root 110667 Jul 12 07:11 /var/log/messages-20180520 -rw-------. 1 root root 98541 Jul 30 12:29 /var/log/messages-20180730 -rw------- 1 root root 1273 Jul 31 03:39 /var/log/messages-20180807 -rw------- 1 root root 6131 Aug 8 17:20 /var/log/secure -rw-------. 1 root root 17996 May 20 03:30 /var/log/secure-20180520 -rw-------. 1 root root 46696 Jul 30 13:06 /var/log/secure-20180730 -rw------- 1 root root 5764 Aug 7 09:10 /var/log/secure-20180807
1.3 用戶的定時任務
crontab -l 查看用戶的定時任務 crontab -e 編輯用戶的定時任務 /var/spool/cron/root root用戶的定時任務 crontab -l = cat /var/spool/cron/root crontab -e = vi /var/spool/cron/root
1.3.1 為什麼使用crontab
1、 有語法檢查功能
2、 方便
1.3.2 檢查定時任務是否運行
定時任務服務 crond
方法1 [root@zeq ~]# /etc/init.d/crond status crond (pid 1572) is running... 方法2 [root@zeq ~]# ps -ef |grep crond root 1572 1 0 Aug07 ? 00:00:00 crond root 27470 26990 0 17:30 pts/2 00:00:00 grep --color crond
1.3.3 查看crond是否開機自啟動
[root@zeq ~]# chkconfig |grep crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
1.4 定時任務的相關目錄
/etc/spool/cron 定時任務的配置文件 /var/log/cron 定時任務的日誌文件 /etc/cron.deny 定時任務的黑名單
1.5 定時任務基本格式
分時日月周
註意:周幾和日期不能同時使用 如:2020年2月28星期六
例:
每天的上午8點30分,來學校上車(go to school)
30 08 * * * go to school
每天晚上12點準時,回家自己開車(go to bed)
00 0 * * * go to bed
1.6 定時任務中常用符號
* 每
*/n 每隔n久
- 幾點到幾點
, 分割
1.7 定時任務測試
1、命令 [root@zeq ~]# echo zeq >/tmp/name.log [root@zeq ~]# cat /tmp/name.log zeq 2、書寫定時任務 [root@zeq ~]# crontab -e #print name zhangenqing at 2018.xx.xx * * * * * echo zeq >> /tmp/name.log 查看定時任務 [root@zeq ~]# crontab -l #print name zhangenqing at 2018.xx.xx * * * * * echo zeq >> /tmp/name.log 3、查看定時任務日誌 [root@zeq ~]# tail -3 /var/log/cron Aug 8 19:36:23 oldboy50 crontab[27563]: (root) END EDIT (root) Aug 8 19:37:01 oldboy50 crond[1572]: (root) RELOAD (/var/spool/cron/root) Aug 8 19:37:01 oldboy50 CROND[27572]: (root) CMD (echo zeq >> /tmp/name.log) 4、檢查文件內容 [root@zeq ~]# cat /tmp/name.log zeq zeq
1.8 定時任務書寫流程
1.8.1 第一個裡程碑
命令行測試,把你的名字顯示到文件中
1.8.2 第二個裡程碑
把命令放到腳本中
1.8.3 第三個裡程碑
測試腳本是否可以使用
1.8.4 第四個裡程碑
書寫定時任務
- 每分鐘執行
- 改為需要的時間
1.8.5 第五個裡程碑
檢查結果
- 查看定時任務的日誌
- 查看命令是否執行成功
第2章 定時任務練習
2.1 每天晚上12點打包備份/etc目錄到/tmp下麵 腳本
2.1.1 命令
[root@zeq ~]# tar zcf /tmp/etc-`date +%F_%T`.tar.gz /etc/ tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets [root@zeq ~]# ll /tmp/ total 9528 -rw-r--r-- 1 root root 9752749 Aug 9 15:26 etc-2018-08-09_15:26:26.tar.gz
2.1.2 書寫腳本
[root@zeq ~]# cat /server/scripts/bak-etc.sh tar zcf /tmp/etc-`date +%F_%T`.tar.gz /etc/
測試腳本 [root@zeq ~]# sh /server/scripts/bak-etc.sh tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets [root@zeq ~]# ll /tmp/ total 19056 -rw-r--r-- 1 root root 9752749 Aug 9 15:26 etc-2018-08-09_15:26:26.tar.gz -rw-r--r-- 1 root root 9752749 Aug 9 15:29 etc-2018-08-09_15:29:23.tar.gz
2.1.3 書寫定時任務
[root@zeq ~]# crontab -e 00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1 查看定時任務內容 [root@zeq ~]# crontab -l 00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1 [root@zeq ~]# ll /tmp/ total 28584 -rw-r--r-- 1 root root 9752749 Aug 9 15:26 etc-2018-08-09_15:26:26.tar.gz -rw-r--r-- 1 root root 9752749 Aug 9 15:29 etc-2018-08-09_15:29:23.tar.gz -rw-r--r-- 1 root root 9752749 Aug 9 15:41 etc-2018-08-09_15:41:42.tar.gz
2.1.4 根據要求的時間修改定時任務時間
[root@zeq ~]# crontab -l 00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1
2.1.5 定時任務中-命令或腳本結果(正確及錯誤)定向
到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/zeq.txt 2>&1
2.2 企業案列
如果定時任務規則結尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/oldboy 2>&1,很容易導致硬碟inode空間被占滿,從而系統服務不正常。
2.2.1 定時任務不斷給你發送郵件
You have new mail in /var/spool/mail/root
2.2.2 郵件軟體關閉 , 定時任務不斷給你發送郵件 存放在郵件的臨時目錄 等待發送
inode用光了 定時任務書寫不規範導致的
2.3 每兩個小時打包備份 /etc/rc.local /etc/hosts /etc/fstab /etc/sysconfig 備份到/backup目錄
書寫腳本 [root@zeq ~]# cat /server/scripts/bak-conf.sh tar zchf /backup/conf-`date +%F_%T`.tar.gz /etc/rc.local /etc/hosts /etc/fstab /etc/sysconfig/ 書寫定時任務 [root@zeq ~]# crontab -l 00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1 00 */2 * * * sh /server/scripts/bak-conf.sh >/dev/null 2>&1
2.4 每天晚上12點打包備份/etc/目錄 備份到 /backup下麵 備份到/backup/10.0.0.200
2.4.1 查看ip
[root@zeq ~]# hostname -I 10.0.0.201
2.4.2 修改變數ip
[root@zeq ~]# ip=`hostname -I|awk '{print $1}'`
2.4.3 查看變數
[root@zeq ~]# echo $ip 10.0.0.201
2.4.4 測試命令
創建ip目錄 [root@zeq ~]# mkdir -p /backup/$ip [root@zeq ~]# ll /backup/ total 136 drwxr-xr-x 2 root root 4096 Aug 9 16:20 10.0.0.201 -rw-r--r-- 1 root root 61485 Aug 9 15:56 conf-2018-08-09_15:56:52.tar.gz -rw-r--r-- 1 root root 61485 Aug 9 16:00 conf-2018-08-09_16:00:01.tar.gz -rw-r--r--. 1 root root 609 Jul 12 07:49 conf.tar.gz 測試命令 [root@zeq ~]# tar zcf /backup/$ip/etc-`date +%F_%T`.tar.gz /etc/ tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets [root@zeq ~]# ll /backup/10.0.0.201/ total 9528 -rw-r--r-- 1 root root 9752749 Aug 9 16:21 etc-2018-08-09_16:21:47.tar.gz
2.4.5 書寫腳本
[root@zeq ~]# cat /server/scripts/bak-etc-adv.sh ip=`hostname -I|awk '{print $1}'` mkdir -p /backup/$ip tar zcf /backup/$ip/etc-`date +%F_%T`.tar.gz /etc/
2.4.6 書寫定時任務
[root@zeq ~]# crontab -l 00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1 00 */2 * * * sh /server/scripts/bak-conf.sh >/dev/null 2>&1 00 00 * * * sh /server/scripts/bak-etc-adv.sh >/dev/null 2>&1
2.5 sh -x 顯示腳本執行過程
以+開頭的行 表示執行過程 不是以+開頭的行 顯示/輸出 [root@zeq ~]# sh -x /server/scripts/bak-etc.sh ++ date +%F_%T + tar zcf /tmp/etc-2018-08-09_16:29:34.tar.gz /etc/ tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets