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任務定義:

 

<<========================================batch========================================>>

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任務

wKiom1Xtci-j7emRAAA27PwB4Vo586.jpg

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

wKioL1XtdFniDq1uAABpq2NiNPk561.jpg

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

wKioL1XtdFni9O39AADCWcvN_pk247.jpg


 

2、每週日凌晨2點30分,運行cp命令對/etc/fstab文件進行備份,存儲位置爲/backups/fstab-YYYY-MM-DD-hh-mm-ss

 //使用命令crontab -e 編輯cron任務列表,新增一行任務

wKiom1XtcjCjHaY9AACULfxFrec186.jpg


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

wKioL1XtdFniDTWgAADIjCgd3Cs986.jpg



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

 //事先創建好/statistics目錄,然後編輯cron任務文件

wKiom1XtcjDhFPL4AAD5MFQORWU715.jpg


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

wKioL1XtdFny-NwKAAOERSKCu4w160.jpg


 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章