日期: 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任務
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauYDO18mV0I0dQdjMBFUQS1WZ3oWLpNGdYFTbvl2S39CXFN0LcJzNvwlMw00LcJDMzZWe39CXt92Yu8GdjFTNuMzcvw1LcpDc0RHaiojIsJye.jpg)
//編輯完後使用crontab-l 列出任務
//修改系統時鐘,驗證corn任務是否被執行
2、每周日淩晨2點30分,運作cp指令對/etc/fstab檔案進行備份,存儲位置為/backups/fstab-YYYY-MM-DD-hh-mm-ss
//使用指令crontab -e 編輯cron任務清單,新增一行任務
//修改時間,驗證任務是否被執行
3、每天晚上12點,取得/proc/meminfo檔案中所有以S或M開頭的行,追加至/statistics/meminfo.txt檔案中,且每天的消息之前,要加上類似===============分隔線
//事先建立好/statistics目錄,然後編輯cron任務檔案
//修改系統時間驗證任務是否被執行