天天看點

cron任務計劃

日期: 2015年09月05日

任務計劃:

任務計劃分為兩種:

1、在未來時間點一次性執行某任務,用到的工具: at、batch

2、在未來時間内周期性執行某任務,用到的工具: cron

檢視系統監聽端口:

ss -tnl

netstat -tnl

================================================================================

電子郵件服務:

smtp:simple mail transmission protocol 簡單郵件傳輸協定

/var/spool/mail/USERNAME

pop3:post office protocol 郵局協定

imap4:internet mail access protocol網際網路通路協定

郵件服務啟動與否狀态檢視: netstat -tnl 或 ss -tnl

[root@CentOS-6 ~]# netstat -tnl | grep ':\<25\>'

tcp    0    0    127.0.0.1:25    0.0.0.0:*    LISTEN    

tcp    0    0    ::1:25          :::*         LISTEN    

127.0.0.1:25 表示此服務的端口僅監聽在本地的回環接口上,預設收發郵件

僅能在本機上的使用者間進行,且隻能通過回環接口上的位址進行。

mail指令

用法:

mail:進入互動式收發郵件接口

q: 退出

N: 檢視第N封郵件

mail -s "SUBJECT" Username@Hostname

mail -s "SUBJECT" Username@Hostname < /PATH/FROM/SOMEFILE

COMMAND | mail -s "SUBJECT" Username@Hostname

<<========================================【at】========================================>>

at指令

功能:

承載未來時間運作的某作業,支援使用作業隊列,預設為a隊列。

格式:

at [OPTION]... TIME

at -f /PATH/FROM/SOMEFILE  TIME

Ctrl+d 送出作業

作業結果:以郵件形式發送給系統上的目前使用者

TIME:

(1)精确時間

HH:MM

MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YYor  [CC]YY-MM-DD

tomorrow

(2)相對時間

now+UNIT

minute、hour、day、week

(3)模糊時間

noon 正午12:00

midnight 午夜0:00

teatime 下午16:00

常用選項:

-q QUEUE: at任務作業隊列

-f /PATH/FROM/SOMEFILE...TIME: 從指定的檔案中讀取要運作的任務作業

-l: 檢視隊列中的待運作作業清單,相當于atq指令

-c AT_JOB_NUM: 檢視指定待運作作業的内容

-d: 删除指定作業,相當于atrm

<<========================================【batch】========================================>>

batch指令

由系統自行選擇在資源較為空閑的時間點運作指定的任務

周期性任務計劃:cron

CentOS 5:vixie-cron

CentOS 6/7:cronie

周期性任務計劃需要服務作為背景支撐,該依靠守護程序:crond

可使用 service crond status 檢視crond是否處在運作狀态

crond (pid 1492) is running...   //表示服務正在運作

cron任務分為兩類:

(1) 系統cron任務:沒有預設運作使用者身份,是以需要額外指定運作者

配置檔案:/etc/crontab

(2) 使用者cron任務:由某個使用者所送出,預設以送出者身份運作,無需額外指定運作者。

配置檔案:/var/spool/cron/USERNAME

cron配置檔案中每行定義一個獨立的任務

★注意:建議在定義cron任務時,所用到的指令使用絕對路徑;如果是腳本,

腳本中的指令需使用絕對路徑,或自定義一個擁有完整路徑的系統環境變量。

★系統cron一般很少手動去編輯,大多數情況都是定義使用者cron

使用vi編輯cron任務,無法檢查文法錯誤,建議使用crontab指令,不建議使用vim指令

配置檔案範本:

SHELL=/bin/bash   //定義用哪個shell用來解釋運作的任務

PATH=/sbin:/bin:/usr/sbin:/usr/bin   //用來定義任務中要執行指令的路徑

MAILTO=root   //表示系統cron任務運作後把郵件發送給哪個使用者

HOME=/   //定義目前系統cron自己的家目錄

# Fordetails 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) ORsun,mon,tue,wed,thu,fri,sat

#|  | |  |  |

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

共有7個字段組成:

前5個字段:時間點(周期性任務的時間點)

user-name: 說明以哪個使用者的身份運作任務

command to be excuted: 指明要運作的任務

共5個時間點:

分鐘:有效取值範圍0-59

小時:0-23

日:1-31

月:1-12

周幾:0-7

★注意:幾月幾号與周幾,不建議同時使用

時間點表示法:

*  對應時間點有效取值範圍内的每個時間點

-  一個特定的連續時間範圍:3-7

,  一個離散的時間點: 3,5,7

/#  有效時間範圍内的每多少時間,用于指定頻率

*/# 在對應的時間位有效取值上每#個時間機關一次

例如:15 8 5 3*   //表示每年3月5日8點15分 *表示周幾不做限定

例如:5 20 10 **   //表示每月10日20點05分 後面兩個 * 表示不對年和周幾做限定

例如:30 18 * *3   //表示每周三的18點30分

例如:0 3 * * *   //表示每天的3點, 後面的三個 * 表示不對年、月、周幾做限定

例如:30 * * **  //表示每小時的30分鐘運作任務

例如:* * * **   //表示每分鐘任務(最小時間機關為分鐘)

例如:* */3 * ** /bin/echo "hello"   //表示當每三個小時到達時,這個小時内每一分鐘都運作

例如:15 */3 * ** /bin/echo "hello"   //表示每三個小時運作一次,(分鐘一定得是有效取值範圍)

例如:*/3 * * ** /bin/echo "hello"   //表示每三分鐘運作一次後面指令

★注意:對無法等分的數字,無法用這個格式指定,如:并不能精确做到每7分鐘一次

例如:5 7 * *1-5 /bin/echo "hello"   //表示周一到周五,每天的7點5運作後面的指令

例如:5 7 * *2,4,6 /bin/echo "hello"  //表示每周二、四、六的7點5分運作後面的指令

思考:

1、如果想實作每8分鐘運作一次某任務,如何編寫

2、如果想每10秒運作一次某任務,如何編寫

使用者cron任務定義:

crontab指令

crontab[-u user] [-l | -r | -e]

-u user: 不是管理自己的cron任務,而是指定的目标使用者的cron任務,僅root擁有管理其他使用者的cron任務的權限,預設管理自己的

-l list,列出任務

-r remove,移除所有任務(注意:删除一個任務應該通過編輯界面删除行實作)

-e edit,打開編輯界面定義corn任務

crontab -e -u USERNAME

補充性的工具:anacron:

為cron提供了補充機制,在每次開機後檢查crontab中的所有任務,是否在過去計劃周期内被執行,如果任務沒被執行它會盡快啟動。

注意:任務運作後的結果,以郵件發送給任務相關使用者

(1)、如果不想接收任務執行結果的通知郵件,丢棄郵件通知可使用輸出重定向

COMMAND > /dev/null

COMMAND &> /dev/null

COMMAND > /dev/null 2>&1

(2)、對于crontab檔案來講,%有特殊功用;如果crontab中指令需要使用%

要記得對其轉義或者使用單引号對其引用

* * * * * /bin/touch /tmp/test-$(date+\%F-\%H-\%M-\%S)

* * * * * /bin/touch /tmp/test-$(date+'%F-%H-%M-%S')

練習:

1、每周一到周六的淩晨3點20分,運作tar指令對/etc/目錄進行歸檔另存,存儲位置為/backups/etc-YYYY-MM-DD.tar.xz;

//事先建立好/backups目錄,鍵入 crontab -e 編輯cron任務

cron任務計劃

    //編輯完後使用crontab-l 列出任務

cron任務計劃

//修改系統時鐘,驗證corn任務是否被執行

cron任務計劃

2、每周日淩晨2點30分,運作cp指令對/etc/fstab檔案進行備份,存儲位置為/backups/fstab-YYYY-MM-DD-hh-mm-ss

 //使用指令crontab -e 編輯cron任務清單,新增一行任務

cron任務計劃

//修改時間,驗證任務是否被執行

cron任務計劃

3、每天晚上12點,取得/proc/meminfo檔案中所有以S或M開頭的行,追加至/statistics/meminfo.txt檔案中,且每天的消息之前,要加上類似===============分隔線

 //事先建立好/statistics目錄,然後編輯cron任務檔案

cron任務計劃

//修改系統時間驗證任務是否被執行

cron任務計劃

繼續閱讀