python海龜繪圖之畫國旗例項程式碼
定時任務
1.定時任務的相關檔案
使用者的定時任務檔案
/var/spool/cron/使用者名稱 # 普通使用者定義定時任務的配置檔案
管理員的定時任務檔案
/etc/crontab
2.定時任務書寫方式
格式 :* * * * * 代表:分(0-59) 時(0-23) 日(1-31) 月(1-12) 周(0-7,0/7代表週日)
* 每
*/n 間隔時間 # */5 * * * * 每5分鐘
- 區間 #上午的5點到11點執行 cmd命令:00 5-11 * * * cmd
, 分隔 #上午的5點到11點 下午的15點執行cmd命令:00 5-11,15 * * * cmd
1.設定管理員定時任務
編輯檔案:vim /etc/crontab
設定定時任務:
1)每分鐘往/root/2.txt中追加內容”jia“ :* * * * * root echo jia >> /root/2.txt
2)每5分鐘往/root/2.txt中追加內容”jia“ :*/5 * * * * root echo jia >> /root/2.txt #/n每n分鐘執行一次
如何檢視定時任務是否執行成功?:
[root@oldboyedu ~]# tailf /var/log/cron #只能檢視執行,不能看成沒成功
[root@oldboyedu ~]# cat /var/spool/mail/root(使用者名稱)#可看到結果成沒成功
2.設定使用者定時任務
1.使用者的定時任務 只識別的路徑 /usr/bin 目錄
解決辦法:
1)使用全路徑執行命令
* * * * * /usr/sbin/ntpdate ntp1.aliyun.com
2) 定義PATH變數
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
或者 PATH=‘$PATH:想要新增的路徑變數’
* * * * * ntpdate ntp1.aliyun.com
2.使用命令編輯配置檔案
crontab -e 編輯檔案 #語法檢查 書寫是否正確
crontab -l 檢視使用者的定時任務
crontab -r 清除使用者的定時任務 慎用
3.案例:定時任務 每分鐘執行一次 測試 OK 修改為 每天凌晨12點執行一次
1) 使用awk取出系統的eth0網絡卡IP地址
[root@oldboyedu ~]# ifconfig eth0|awk 'NR==2{print $2}'
把取出的變數賦值,以便呼叫:
[root@oldboyedu ~]# IP= ‘ifconfig eth0|awk 'NR==2{print $2}'
`` 或者是 $() 把反引號中的命令先解析 把結果留在原地 賦值給變數名稱
2)建立一個以IP地址命名的目錄 /root/10.0.0.200
呼叫變數建立目錄: [root@oldboyedu ~]# mkdir /root/$IP
3)打包 /etc/passwd 檔案 以時間格式命名 2020-11-12_etc.tar.gz 放在10.0.0.200目錄下
把時間變數賦值:TIME=·date +%F-%H-%M-%S
· 有反引號
到相對路徑打包:cd /etc
tar zcvf /root/$IP/${TIME}_etc.tar.gz passwd
4) 解決辦法:先把命令寫入指令碼 測試----》在定時任務執行指令碼
把步驟寫入shell指令碼 固定的目錄 /server/scripts 建立目錄:mkdir -p /server/scripts
執行shell指令碼幾種方式:
(1)sh或bash 指令碼名稱 :sh是bash的軟連線 子shell中執行
(2). 或者 source 將子shell中的命令 拿到父shell中執行
全路徑方式 預設shell指令碼沒有執行許可權 必須給執行許可權
./1.sh 當前目錄下 ;/root/1.sh 根目錄下
編輯指令碼:vim 1.sh
###1. 獲取IP地址 定義變數
IP=`ifconfig eth0|awk 'NR==2{print $2}'`
TIME=`date +%F-%H-%M-%S`
###2. 建立以IP命名的目錄
mkdir /root/$IP
###3. 打包檔案並放入目錄
cd /etc
tar zcf /root/$IP/${TIME}_etc.tar.gz passwd
5)寫入定時任務 crontab -e
1.先設定為每分鐘測試
[root@sc ~]# crontab -l
PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'
* * * * * sh /root/1.sh
2. 修改正常的備份時間
00 00 * * * sh /root/1.sh
4.定時任務規範:
1)定時任務規則之前加註釋: 姓名,時間,定時任務的作用等
2)使用指令碼替代命令列定時任務
(1)先在命令列測試命令出錯
(2) 寫入指令碼測試 使用-x 檢視指令碼的執行過程
[root@oldboyedu scripts]# sh -x 1.sh
++ ifconfig eth0
++ awk 'NR==2{print $2}'
+ IP=10.0.0.200
++ date +%F-%H-%M-%S
+ TIME=2020-11-12-11-26-18
+ mkdir -p /root/10.0.0.200
+ cd /etc
+ tar zcf /root/10.0.0.200/2020-11-12-11-26-18_etc.tar.gz passwd
3)定時任務中date命令%百分號
(1)預設crontab不識別% 特殊含義的字元 需要轉義\
(2)先寫入指令碼,再執行指令碼
4)執行指令碼一定要用/bin/sh或sh
(1)如果定義了環境變數PATH 不需要加全路徑/bin /usr/bin #PATH="echo $PATH"
(2)如果沒有定義 建議全路徑執行
5)定時任務中-命令或指令碼結果(正確及錯誤)定向到黑洞(>/dev/null 2>&1)或檔案中
(1)每執行一個定時任務 每次都會把執行結果傳送到郵件系統中 /var/spool/mail/root
前提是postfix開啟狀態
關閉郵件服務: systemctl stop postfix
(2)公司中大量的伺服器是關閉postfix服務 郵件無法接收到定時任務的結果. 憋著釋出不出去 會產生大量小檔案,大量的小檔案會佔用大量的inode 導致無法往磁碟中寫入資料
預設小檔案的位置:/var/spool/postfix/maildrop/
解決方法1: 執行結果 定向到黑洞或者定向到檔案中
* * * * * echo hehe &>/dev/null
解決方法2: 開啟郵件系統 不建議
解決方法3: 定時刪除小檔案
* * * * * rm -rf /var/spool/postfix/maildrop/* #時間自己定義
6)避免不必要的程式及命令輸出
打包進入相對路徑 再打包;tar zcvf 去掉 v,打包命令去掉顯示過程