日期: 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任務
//編輯完後使用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任務文件
//修改系統時間驗證任務是否被執行