1.4
定時任務之九句箴言
九句箴言---- ?不會九句箴言別做運維
1.定時任務規則之前加注釋
2.使用腳本代替命令行制定定時任務
3.定時任務中date命令%的特殊含義
定時任務中,%表示回車??-----可以使用\轉義
4.運行腳本一定要用/bin/sh或sh
腳本不必須有x權限
5.定時任務中-命令或腳本的輸出結果(正確或錯誤)
定向到黑洞(>/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 ??????開機自啟動的軟件,命令
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://blog.51cto.com/13517084/2067564