linux定時任務及練習


第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. 每分鍾執行
  2. 改為需要的時間

1.8.5 第五個里程碑

檢查結果

  1. 查看定時任務的日志
  2. 查看命令是否執行成功

第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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM