18.1.3 -定時任務知識講解

18.1.3node

            定時任務nginx

內容:vim

1. 定時任務分類bash

2. 定時任務的使用服務器

3. 定時任務的相關文件app

4. 定時任務的基本格式less

回顧:備份:一份 cpide

目錄  tarpost

第1章 定時任務分類

1. cornd(crontab)定時任務軟件(軟件包cronie)測試

2. atd 運行一次

3. anacron 7*24小時運行的服務器

1.1 crond軟件/服務     ---軟件包名 cronie

查軟件包是否安裝

[root@oldboyedu43-lnb ~]# rpm -qa  |grep cron            查看軟件包是否安裝
crontabs-1.10-33.el6.noarch
cronie-1.4.4-16.el6_8.2.x86_64
cronie-anacron-1.4.4-16.el6_8.2.x86_64   
[root@oldboyedu43-lnb ~]# rpm -ql cronie                   查看軟件包裏面的內容 
/etc/cron.d
/etc/cron.d/0hourly
/etc/cron.deny
/usr/share/man/man8/cron.8.gz
/usr/share/man/man8/crond.8.gz
/var/spool/cron

#CentOs7系統中 沒有ifconfig 命令   
yum install  ifconfig 

No package ifconfig available. #找不到叫可用的ifconfig安裝包
Error: Nothing to do           #沒有任何動做

[root@oldboyedu43-lnb ~]# rpm -qf  ifconfig               找出ifconfig 屬於的軟件包的名字
error: file /root/ifconfig: No such file or directory
[root@oldboyedu43-lnb ~]# rpm -qf  /sbin/ifconfig        寫命令的絕對路徑   
net-tools-1.60-114.el6.x86_64

 

rpm命令總結

rpm  Linux rpm軟件管理命令
   -q   --query 查詢
   -a   --all 全部 
   -l   --list 
   -qa  查看軟件是否安裝
   -ql  顯示軟件裏面的內容
   -qf  查詢某個命令/配置文件屬於哪一個軟件包

rpm -ivh 軟件包.rpm  安裝rpm

          系統光盤中

      -e     刪除某個軟件包      工做中通常不刪,不用了,關閉不用就ok

 

atd 運行一次(一次性)             基本不用

anacron7*24小時運行的服務器  基本不用

1.2 crond分類:用戶定時任務和系統定時任務

1.2.1 系統定時任務

系統中毒的時候    系統會自動運行裏面的內容

/etc/cron.hourly/        系統定時任務每小時運行這個目錄裏的內容

/etc/cron.daily/         系統定時任務天天運行這個目錄裏的內容

/etc/cron.weekly/       系統定時任務周運行這個目錄裏的內容

/etc/cron.monthly/      系統定時任務每個月運行這個目錄裏的內容

 

/etc/cron.deny          定時任務的黑名單

/etc/crontab

[root@oldboy etc]# cat crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# For details see man 4 crontabs

 

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

 

系統定時任務 + logrotate,命令完成對日誌的日誌切割/日誌輪詢

/var/log/cron       /var/log/messages      /var/log/secure

[root@oldboyedu43-lnb ~]# ll /var/log/{messages*,secure*}
-rw-------  1 root root    396 Dec 28 10:56 /var/log/messages
-rw-------. 1 root root 205362 Dec 11 09:41 /var/log/messages-20171211
-rw-------  1 root root 107515 Dec 17 09:23 /var/log/messages-20171217
-rw-------  1 root root    332 Dec 26 19:07 /var/log/messages-20171226
-rw-------  1 root root   6699 Jan  3 08:40 /var/log/secure
-rw-------. 1 root root   1186 Dec 11 09:09 /var/log/secure-20171211
-rw-------. 1 root root  34719 Dec 17 10:25 /var/log/secure-20171217
-rw-------  1 root root   2096 Dec 26 19:12 /var/log/secure-20171226
[root@oldboyedu43-lnb ~]# #日誌切割 日誌輪詢 

[root@oldboyedu43-lnb ~]# ll /etc/cron.daily/
total 24
-rwx------. 1 root root  180 Jul 10  2003 logrotate
-rwx------. 1 root root  927 Mar 22  2017 makewhatis.cron
-rwx------. 1 root root  189 Jan 26  2015 mlocate.cron
-rwxr-xr-x. 1 root root 2126 Jul 19  2013 prelink
-rwxr-xr-x. 1 root root  563 Nov 23  2013 readahead.cron
-rwxr-xr-x. 1 root root  433 Nov  7  2015 tmpwatch
[root@oldboyedu43-lnb ~]# cat /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

 

1.2.2 用戶的定時任務  (一個命令+一個目錄)

crontab  -l (list)   列表  查看用戶的定時任務  從容 table

crontab  -e (edit)  編輯用戶的定時任務

/var/spool/cron/root  (root是用戶名  root用戶的定時任務)

 一個命令  crontab

查看當前系統用戶的定時任務  crontab  -l      list列表

[root@oldboy oldboy]# crontab -l

no crontab for root             root用戶沒有定時任務

添加一個定時任務  crontab  -e                           edit 編輯

注意:crontab 命令直接做用在配置文件中  不是臨時

一個文件/var/spool/cron/root

第2章 定時任務的使用

2.1 定時任務依賴的軟件(服務)--是否可用

2.1.1 查看當前是否正在運行   /etc/init.d/crond status      ps -ef|grep crond

      鬧鐘是否有電

2.1.2 查看crond是否開機自啓動     chkconfig

1&2如今能用,重啓以後也可用

 

查看定時任務 當前是否在運行           ---看鬧鐘是否有電

[root@oldboy /]# ps -ef |grep crond

root       1589      1  0 Jan02 ?        00:00:04 crond

root      11128   7879  0 19:12 pts/8    00:00:00 grep --color=auto crond

經常使用

[root@oldboy /]# /etc/init.d/crond status

crond (pid  1589) is running...

pid     ===process id  進程號碼

特色:每一個正在運行的進程都有

           每一個進程的pid都不相同

 

查看定時任務  重啓服務器以後是否生效  (是否開機自啓動)

[root@oldboy /]# chkconfig |grep cron

crond           0:off 1:off 2:on 3:on 4:on 5:on 6:off

 

crontab  -e  ====== vim /var/spool/cron/root      root設置定時任務

crontab  -l  ======cat  /var/spool/cron/root  

2.2  使用crontab命令做用  

1.有簡單的語法檢查功能

2.方便   

 

2.3 查看文件內容

1. head/tail

2. grep

3. less/more

less快捷鍵和vi類似

more 不支持快捷鍵   只能向下   最後直接退出   (廢了的)

         定時任務日誌格式 

圖片1.png 

第3章 定時任務相關文件

/var/spool/cron/     定時任務的配置文件所在目錄

/var/log/cron       定時任務的日誌文件   運行過程的一個記錄

/etc/cron.deny      哪些用戶禁止使用定時任務  -定時任務黑名單(瞭解 -不多用)

 

du   -sh   查看某個文件/目錄大小

第4章 定時任務基本格式

4.1 口訣: 什麼時間(分時日月周)  幹什麼事情        時間分爲5個部分

圖片2.png 

實例4-1 :每三分鐘同步一下系統時間

1個里程碑-命令
[root@oldboy oldboy]# which  ntpdate                       
/usr/sbin/ntpdate
[root@oldboy oldboy]# /usr/sbin/ntpdate ntp1.aliyun.com     命令儘可能絕對路徑
 3 Jan 10:34:49 ntpdate[8624]: adjust time server 182.92.12.11 offset -0.087505 sec
#第2個里程碑-寫入定時任務  crontab  -e
[root@oldboy oldboy]# crontab -l                           查看定時任務
#sync time by oldboy at 20180101                       添加註釋,爲了之後方便管理
*/3  *  *  *  *   /usr/sbin/ntpdate ntp1.aliyun.com          sync    同步
#第3個里程碑-檢查
##1.看日誌      2.修改下時間 
[root@oldboy oldboy]# date 
Wed Jan  3 10:38:27 CST 2018
[root@oldboy oldboy]# date -s "1day"
Thu Jan  4 10:38:41 CST 2018
[root@oldboy oldboy]# tail -f /var/log/cron                 查看日誌文件的實時更新
Jan  4 10:39:01 oldboyedu43-lnb CROND[8657]: (root) CMD (/usr/sbin/ntpdate ntp1.aliyun.com)
Jan  3 10:39:01 oldboyedu43-lnb CROND[8662]: (root) CMD (/usr/sbin/ntpdate ntp1

注意:(技巧)

星期幾和日期不要同時加上   ---執行機會渺茫

1.涉及到命令,如今命令行確認正確,在複製粘貼到配置文件或腳本中

2.定時任務報錯不明顯,必定要檢查   

3.You have new mail in /var/spool/mail/root  會致使一種故障   inode滿了

定時任務寫配置文件用絕對路徑

永遠不要在分鐘上設置*(新號)

4.2 計劃任務中經常使用符號

*  

/n  */10 * * * *  10分鐘

-  * 07-08 * * *  7點到8

,(逗號) 分隔   * 23,00-07 * * *  23點和0點到7點           不能寫23-07

 

實例4-1 天天上午7點到11點 每個小時運行CMD命令

00  07-11  *  *  *      CMD

:永遠不要在分鐘上設置*(新號)

  表示小時的時候注意分鐘

實例4-2 跨兩天計劃任務的書寫

* 23,00-07/1 * * * /application/nginx/sbin/nginx -s reload 

23點 和 0點到7點 ,每小時的每分鐘執行一次

 

00 23,00-07/1 * * * /application/nginx/sbin/nginx -s reload

23點和0點-7點,每小時執行一次

 

4.3 定時任務執行腳本

實例4-1 把當前系統時間按年--日的形式追加到/tmp/time.log ,每分鐘自動執行一次

流程:

1. 命令行測試 --把命令放入到腳本中

2. 把命令行放入到腳本中  ---name.sh

3. 測試下腳本是否能夠用  ---腳本的絕對路徑  /   bin/sh

4. 寫定時任務

5. 檢查結果  --1)查看定時任務的日誌   2)命令執行是否成功

步驟:

1在命令行測試命令
[root@oldboyedu43-lnb oldboy]# date +%F_%w
2018-01-03_3
[root@oldboyedu43-lnb oldboy]# date +%F_%w >>/tmp/time.log
#2.寫入腳本
# mkdir -p /server/scripts                                   把命令寫進腳本並查看
[root@oldboyedu43-lnb oldboy]# cat /server/scripts/date.sh
date +%F_%w 
[root@oldboyedu43-lnb oldboy]# sh /server/scripts/date.sh    sh命令執行腳本
2018-01-03_3
#3.寫入定時任務
[root@oldboyedu43-lnb oldboy]# crontab -l |tail -2 
#print time xxxx                                         
* * * * * /bin/sh /server/scripts/date.sh >>/tmp/time.log    命令,腳本都寫絕對路徑   
#4.檢查結果        --1.實施查看定時任務日誌更新   2.效果
[root@oldboyedu43-lnb oldboy]# tail -f /var/log/cron
Jan  3 12:15:01 oldboyedu43-lnb CROND[9151]: (root) CMD (/bin/sh /server/scripts/date.sh >>/tmp/time.log)
Jan  3 12:16:01 oldboyedu43-lnb CROND[9236]: (root) CMD (/bin/sh /server/scripts/date.sh >>/tmp/time.log)
[root@oldboyedu43-lnb ~]# tail -f  /tmp/time.log  
2018-01-03_3
2018-01-03_3

4.3.1 小結:

1.經過 sh命令運行腳本   腳本沒必要有x權限

2.追加,重定向等儘可能不要寫到腳本中,在定時任務中寫  由於之後腳本中命令一大堆,一條條追加麻煩

3.命令的絕對路徑(儘可能) +腳本的絕對路徑(必須)

C vim中刪除光標到行尾內容

 

錯誤:

圖片3.png 

圖片4.png

在定時任務中%有特殊含義,至關於回車

能夠加轉義符解決

 

總結:

1. 定時任務分類

2. 用戶定時任務與系統定時任務

3. 定時任務書寫流程

4. 定時任務同步系統時間,追加名字或時間到文件

5. 定時任務九句箴言

相關文章
相關標籤/搜索