13 定時任務

2022-07-09 13:45:17 字數 4114 閱讀 4868

​ 使用者的定時任務檔案

​ /var/spool/cron/使用者名稱 # 普通使用者定義定時任務的配置檔案

​ 管理員的定時任務檔案

​ /etc/crontab

​ 格式 :* * * * * 代表:分(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)每分鐘往/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(使用者名稱)#可看到結果成沒成功

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'

​ 把取出的變數賦值,以便呼叫:

​ [root@oldboyedu ~]# ip= 『ifconfig eth0|awk 'nr==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/$_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 根目錄下

###1. 獲取ip位址 定義變數

ip=`ifconfig eth0|awk 'nr==2'`

time=`date +%f-%h-%m-%s`

###2. 建立以ip命名的目錄

mkdir /root/$ip

###3. 打包檔案並放入目錄

cd /etc

tar zcf /root/$ip/$_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'

+ 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,打包命令去掉顯示過程

linux定時任務 at定時任務

at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...

at定時任務

at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...

at定時任務

1 at是只執行一次,執行完後任務刪除。at的守護程序atd會以後臺模式執行,檢查作業佇列來執行。2 預設 atd每60秒巡邏一次,有作業時候,檢查作業時間,如果和當前時間一樣,就執行任務 3 在使用at命令的時候,一定要保證他的守護者atd程序的啟動。用ps ef grep atd來檢視atd是否...