1.4- 定時任務總結之九句箴言

1.4html

定時任務之九句箴言java

九句箴言----  不會九句箴言別作運維node

1.定時任務規則以前加註釋linux

2.使用腳本代替命令行制定定時任務vim

3.定時任務中date命令%的特殊含義tomcat

定時任務中,%表示回車  -----可使用\轉義bash

4.運行腳本必定要用/bin/shsh運維

腳本沒必要須有x權限ide

5.定時任務中-命令或腳本的輸出結果(正確或錯誤)post

定向到黑洞(>/dev/null  2>&1)

或追加到文件中(>>/tmp/oldboy.txt  2>&1)

6.避免沒必要要的程序及命令輸出

tar zcvf  ×××××

tar   zcf  √√√√√

7.打包壓縮使用相對路徑

8.定時任務腳本中的程序文件,儘可能使用絕對路徑

用戶的定時任務中--------默認存放在當前用戶的家目錄

系統的定時任務-----------存放在根目錄下

9.系統與命令位置有關的環境變量問題

linux定時任務生產java服務沒法執行問題羣友案例

定時任務運行腳本的時候 PATH只認識不多的幾個路徑 /usr/bin  /bin

解決:  方法1.使用命令的絕對路徑

       方法2.PATH在腳本的開頭從新定義一下

         Java方面使用絕對路徑麻煩,用此方法(Tomcat)


第1章 箴言5:定製任務執行的結果定向到文件或黑洞中

追加到文件

#backup etc/services to /tmp by oldboy

#00  */2  *  *  *  /bin/sh  /server/scripts/bak-services.sh >>/tmp/back-services.log  2>&1

追加到空洞                                                                    正確的或錯誤的

#backup /var/www/html to back-html.sh

*  *  *  *  *    /bin/sh   /server/scripts/bak-html.sh   >>/dev/null 2>&1

1.1 企業案例:定時任務中 命令或腳本的結果 沒有定向到黑洞或文件中

1.郵件的軟件(Postfix)沒有開啓

inode滿了--------大量小文件堆積在/var/spool/postfix/maildrop/

2.郵件軟件開啓 -------不會致使inode滿了

郵件文件很大----------you have new mail in /var/spool/mail/root

1.1.1 工做中postfix軟件不會運行    

postfix   開啓:  郵件存放位置------/var/spool/main/root

         關閉: 郵件存放在臨時目錄----/var/spool/postfix/maildrop/

1.2 回顧:建立/刪除大量小文件

同時建立大量小文件    --千萬別直接ls      --ls \wc -l

[root@oldboy oldboy]# touch {1..450000}.txt

-bash: /bin/touch: Argument list too long

[root@oldboy oldboy]# echo {1..450000}.txt|xargs touch

同時刪除大量小文件 1.交給管道 加rm                                                                                                       

2. 還刪不了   -縮小範圍一點一點分類刪除

[root@oldboy oldboy]# #ls 1*.txt|xargs rm               方法一

[root@oldboy oldboy]# #ls 2*.txt|xargs rm

[root@oldboy oldboy]# ls *.txt|xargs -n數字  rm         方法二

 

3.或刪除目錄   --刪以前 記好目錄的權限和全部者

 

 

實例1-1 天天凌晨1點把/etc/目錄 打包備份/tmp目錄而且要求天天的備份名字不一樣。

###第1個里程碑-命令             cd到上級目錄  &&  tar 相對路徑     

[root@oldboyedu43-lnb /]# cd / &&  tar zcf /tmp/etc-$(date +%F).tar.gz etc/

[root@oldboyedu43-lnb /]# ls -l /tmp/etc-2018-01-04.tar.gz

-rw-r--r-- 1 root root 9775655 Jan  4 09:31 /tmp/etc-2018-01-04.tar.gz

第二個里程碑--命令放入腳本中

[root@oldboy scripts]# echo 'cd /  && tar zcf etc.$(date +%F).tar.gz etc' >>/server/scripts/etc_bak.sh

[root@oldboy scripts]# cat /server/scripts/etc_bak.sh

cd /  && tar zcf etc.$(date +%F).tar.gz etc

[root@oldboy /]# sh /server/scripts/etc_bak.sh

[root@oldboy /]# ls / |grep etc.2018*

etc.2018-01-04.tar.gz

第三個里程碑--書寫定時任務

[root@oldboy /]# vim /var/spool/cron/root

#backup etc and different time

*  *  *  *  *  /bin/sh /server/scripts/etc_bak.sh  >>/tmp/time.log  2>&1

第四個里程碑--檢查

tail -f  /var/log/cron                               查看定時任務日誌的實時更新

ll  /  |grep etc.2018*                           查看效果

第五個里程碑---確認無誤,按規定建立定時任務

00  1  *  *  *  /bin/sh /server/scripts/etc_bak.sh  >>/tmp/time.log  2>&1

第2章 箴言6儘可能避免一些沒必要要輸出  

zcvf(不要)----zcf  不要顯示過程

顯示過程,,

 

第3章 箴言8定時任務腳本中的程序文件,儘可能使用絕對路徑

用戶的定時任務中--------默認存放在當前用戶的家目錄

系統的定時任務-----------存放在根目錄下

第4章 箴言9系統與命令位置有關的環境變量問題

linux定時任務生產java服務沒法執行問題羣友案例

定時任務運行腳本的時候 PATH只認識不多的幾個路徑 /usr/bin  /bin

解決:  方法1.使用命令的絕對路徑

       方法2.PATH在腳本的開頭從新定義一下

         Java方面使用絕對路徑麻煩,用此方法(Tomcat)

4.1 每分鐘顯示當系統的時間年--日和系統的ip地址,追加到 /tmp/ip.log 

第一個里程碑 ----在命令行中執行命令

[root@oldboy oldboy]# date +%F && ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'

2018-01-04

10.0.0.201

第二個里程碑-----把命令複製粘貼到腳本中         --並執行腳本測試

[root@oldboy oldboy]# sh /server/scripts/print-ip.sh

2018-01-04

10.0.0.201

第三個里程碑----制定定時任務------先每分鐘執行一次,測試是否正確

crontab  -e  寫定時任務

crontab  -l  查看定時任務

#pritn ip and date                                        加上註釋,之後查看方便

*  *  *  *  *  /bin/sh  /server/scripts/print-ip.sh  >>/tmp/ip.log  2>&1      追加到文件中

第四個里程碑----查看效果        ---看定時任務日誌文件       看效果

[root@oldboy ~]# cat /tmp/ip.log

/server/scripts/print-ip.sh: line 1: ifconfig: command not found     報錯

2018-01-04

4.1.1 緣由: 定時任務運行腳本的時候 PATH只認識不多的幾個路徑 /usr/bin  /bin 
      ifconfig 命令 在/sbin

命令行--OK        腳本--OK      定時任務--NO

4.1.2 解決:方法1.腳本中使用命令的絕對路徑

date +%F && /sbin/ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'

 方法2.PATH在腳本的開頭從新定義一下
 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@oldboy oldboy]# vim /server/scripts/print-ip.sh

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

date +%F && ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'

[root@oldboy ~]# tail -f /tmp/ip.log

2018-01-04

10.0.0.201

 

瞭解:有時候必須使用方法二:tomcat

重啓resin的腳本(Java編寫)

使用export從新聲明PATH變量

 

總結:

1.定時任務一些注意事項

  00  00  *  *  *         表示半夜12/0點    

  00  07  *  *  *         表示7點整

  00  23,00-07 *  *  *     表示晚上23點一直到次日早上7

  建立定時任務一步一步來,多複製粘貼

  將定時任務的輸出結果重定向到文件/黑洞

 

2.故障排查

 查看日誌          /var/log/cron    

 檢查結果         是否獲得你想要的內容

 改成每分鐘運行   

 修改系統時間   --提早幾分鐘

 

 

3.定時任務流程:

相關命令在命令行執行查看效果

無誤後複製粘貼進腳本

/bin/sh 執行腳本查看效果

確認無誤後複製粘貼到定時任務配置文件(/)

時間先設置每分鐘執行一次,查看定時任務的效果

確認無誤後修改定時任務規定時間

 

 

 

擴展:

運行腳本顯示執行過程

/bin/sh  -x        一個+號表示執行了一次      直接顯示到屏幕上的,沒有+

[root@oldboy tmp]# /bin/sh -x /server/scripts/print-ip.sh

+ export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

+ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

+ date +%F

2018-01-04

+ awk -F '[ :]+' 'NR==2{print $4}'

+ ifconfig eth0

10.0.0.201

 

第四關練習(定時任務部分)

實例4-1 每隔2個小時將/etc/services文件打包備份到/tmp下。

命令:
[root@oldboy ~]# cd / && tar zcf /tmp/services.$(date +%F_%H).tar.gz etc/services
[root@oldboy /]# ls /tmp/services.$(date +%F_%H).tar.gz
/tmp/services.2018-01-04_11.tar.gz
寫腳本
[root@oldboy /]# cat /server/scripts/bak-services.sh
cd / && tar zcf /tmp/services.$(date +%F_%H).tar.gz etc/services
劃任務
[root@oldboy /]# crontab -l |tail -3
#backup etc/services to /tmp by oldboy
*  *  *  *  *  /bin/sh  /server/scripts/bak-services.sh >>/tmp/back-services.log  2>&1
檢查
[root@oldboy ~]# ll /tmp |grep "services.2018*"
-rw-r--r--. 1 root root 127314 Jan  4 11:39 services.2018-01-04_11.tar.gz

最後把定時任務設置成規定時間

[root@oldboy ~]# crontab -l |tail -2

#backup etc/services to /tmp by oldboy

00  */2  *  *  *  /bin/sh  /server/scripts/bak-services.sh >>/tmp/back-services.log  2>&1

 

 

實例4-2 .天天晚上 12 點,打包站點目錄/var/www/html 備份到/data 目錄下(最好每次備份按時間生成不一樣的備份包)

命令:
[root@oldboy /]# cd / && tar zcf /data/bak-html$(date +%F) var/www/html
[root@oldboy /]# ls /data |grep "bak-html$(date +%F)"
bak-html2018-01-04
腳本:
[root@oldboy /]# cat /server/scripts/bak-html.sh
cd / && tar zcf /data/bak-html$(date +%F) var/www/html
[root@oldboy /]# /bin/sh /server/scripts/bak-html.sh
定時任務:
[root@oldboy /]# crontab -l |tail -3
#backup /var/www/html to back-html.sh
*  *  *  *  *    /bin/sh   /server/scripts/bak-html.sh   >>/dev/null 2>&1
檢查:
[root@oldboy /]# ls -l /data |grep "bak-html$(date +%F)"
-rw-r--r--. 1 root root      117 Jan  4 12:15 bak-html2018-01-04

檢查無誤修改定時計劃爲規定時間

[root@oldboy /]# crontab -l |tail -3
#backup /var/www/html to back-html.sh 
00  00  *  *  *    /bin/sh   /server/scripts/bak-html.sh     >>/dev/null 2>&1

 

文件

/etc/sysctl.conf    系統的內核配置文件

/etc/rc.local       開機自啓動的軟件,命令

相關文章
相關標籤/搜索