1. 程式人生 > >Linux的例行工作排程(crontab)

Linux的例行工作排程(crontab)

color 方式 root ber 其中 兩個 b2c deb 顯示

一 什麽是例行性工作排程
1 Linux工作排程的種類:at,cron
兩種工作排程的方式:
例行性:每隔一定的周期要來辦的事項
突發性:只做一次就不做的
at:at是可以處理執行一次就結束排程的指令,不過要執行at時,必須要有atd這個服務的支援才行,在Redhat和centos中這個服務是預設啟動的。
crontab:crontab這個指令所設定的工作將會循環一直進行下去,可循環的時間為分鐘、小時、每周、每月或每年。crontab除了可以使用指令執行外,亦可編輯/etc/crontab來支持,至於讓crontab可以生效的服務則是crond這個服務

2 centos Linux 系統上常見的例行性工作
1 進行登錄檔的輪替(log rotate)

Linux會主動的將系統所發生的的各種信息都記錄下來,就是登錄檔,這樣會導致登錄檔文件越來越大,此時適合將登錄文件數據進行遷移,將舊數據與新數據分離,這就是log rotate的任務。
2 登錄文件分析 logwatch 的任務:
如果系統發生了軟件問題、硬件錯誤、資安問題等,絕大部分的錯誤信息都會被記錄到登錄文件中,因此管理員的重要任務之一就是分析登錄檔, centos 提供了一只程序(logwatch)來主動分析登錄信息,所以會受到logwatch的信件
3 建立locate 的數據庫
locate指令是透過已經存在的文件名數據庫來進行系統上文件名的查詢,我們的文件名數據庫是放置在/var/lib/mlocate/中,這個數據庫的自動更新就是系統的例行工作所產生的效果
4 man page 查詢數據庫的建立
5 RPM 軟件登錄文件的建立
6 移除暫存檔
7 與網絡服務有關的分析行為
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二 僅執行一次的工作排程
1 atd 的啟動與at 運作的方式
技術分享圖片

at 的運作方式
我們使用at這個指令來產生索要運作的工作,並將這個工作以文本的方式寫入/var/spool/at/目錄內,該工作便能等待atd這個服務的取用與執行了。

我們可以使用/etc/at.allow與/etc/at.deny這兩個文件來進行at的限制
1 先尋找/etc/at.allow這個文件,寫在這個文件中的使用者才能使用at,沒有在這個文件的使用者則不能使用at(及即使沒有寫在at.deny當中)

2 如果/etc/at.allow不存在,就尋找/etc/at.deny這個文件,若寫在這個at.deny的使用者則不能使用at,而沒有在這個at.deny文件中的使用者,就可以使用at這個命令了
3 如果兩個文件都不存在,那麽只有root可以使用at這個指令了

2 實際運作單一工作排程
語法:
at -c 工作號碼
選項與參數:
-m :當at 的工作完成後,即使沒有輸出訊息,亦可email通知使用者該工作已完成
-l :at -l 相當於atq,列出目前系統上面所有該用戶的at排程
-d :at -d 相當於atrm,可以取消一個在at排程中的工作
-v :可以使用較明顯的時間格式攔出at排程中的任務欄表
-c :可以列出後面接的該項工作的實際指令內容

TIME:時間格式,這裏可以定義出[什麽時候要進行at 這項工作]的時間HH:MM
cx>04:00
在今時今日執行,若該時刻已經超時,則明天HH:MM進行此工作
HH:MM YYYY-MM-DD
cx>04:00 2017-12-22
強制規定在某月某一天的特殊時間執行該工作
HH:MM[amlpm][Month][Date]
cx>04pm july 30

HH:MM[am|pm]+number [minutcs|hours|days|weeks]
cx > now + 5minutes cx>04pm + 3 days

配置實例:
1 配置固定時間執行固定操作(只能執行一次)
技術分享圖片
技術分享圖片

2 配置在該時刻之後進行的操作
技術分享圖片

3 查看任務情況
創建任務
技術分享圖片
查看任務id
技術分享圖片
at -c 任務ID號可以查看具體執行的動作
技術分享圖片
具體的動作
技術分享圖片

4 刪除任務
at -d id號
技術分享圖片

註:
如果在at now+1min
echo "hello"
則不會顯示
因為at的執行與終端環境無關,而所有standard output/standard error ouput 都會傳送到執行者的mailbox
,所以終端機上不會有任何顯示

at 還有一個背景執行的功能
脫機繼續工作的任務
由於at 工作排程的使用上,系統會將該項at 工作獨立出你的bash環境中,直接交給系統的atd程序來接管,因此,當你下達了at的工作之後就可以立刻脫機了,剩下的工作就可以交給Linux管理了

batch:系統有空時才執行背景任務
其實batch時利用at來進行指令的下達,只是加入一些控制參數而已,batch神奇的地方是:他會在CPU的工作負載小於0.8的時候,才進行你所下達的工作任務。

權限黑白名單

技術分享圖片
技術分享圖片
技術分享圖片

此時的admin用戶不具有權限執行at命令

將其加入白名單
技術分享圖片
技術分享圖片
此時可以建立at任務
技術分享圖片

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三 循環執行的例行性工作排程

循環執行的例行性工作排程則是由cron(crond)這個系統服務來控制的

1 使用者的設定
/etc/cron.allow 將可以使用crontab的賬號寫入其中,若不在這個文件內的使用者則不可使用crontab
/tec/cron.deny 的賬號寫入其中,若未記錄到這個文件當中的使用者,就可以使用crontab。

優先級允許比拒絕高,建議一般保留拒絕,允許的可以不寫

當用戶使用crontab這個指令來建立工作排程之後,該項工作就會被記錄到/var/spool/cron裏面去,而且是以賬號來作為判別的。

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

-u 只有root才能進行這個任務,亦及幫其他使用者建立/移除crontab 工作排程

-e :編輯crontab 的工作內容
-l :查閱crontab的工作內容
-r :移除所有的crontab的工作內容,若緊要移除一項,用-c去編輯

使用命令行的方式發起任務
技術分享圖片
技術分享圖片
任務的查看
技術分享圖片
任務的結果
技術分享圖片

任務格式
7 15 * touch /mnt/aaa
分鐘 小時 天 月 周 執行的操作

技術分享圖片

輔助字符

技術分享圖片

刪除任務
技術分享圖片
技術分享圖片
技術分享圖片

若要刪除單個任務,則需要使用-e進行編輯刪除

進行任務的查看
技術分享圖片
技術分享圖片
其默認的存放目錄是/var/spool/cron/ 表示用戶名稱
技術分享圖片

2系統的配置文件:/etc/crontab,/etc/cron.d/
crontab -e 是針對cron來設計的,如果是[系統的例行性任務]時,只需要編輯/etc/crontab 這個文件就可以,crontab其實是/usr/lib/crontab這個執行檔,但是/etc/crontab是一個純文本文檔,可以使用root的身份其編輯

cron 這個服務的最低偵測限制是[分鐘],所以[cron 會每分鐘去讀取一次/etc/crontab與/var/spool/cron 裏面的數據內容],因此只需要編輯完成並存儲就可以了

有時候其他的Unix系統中,由於crontab是讀到內存中的,所以在你修改完/etc/crontab之後,可能不會馬上執行,這時候請重啟crond這個命令

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash 使用哪種shell接口
PATH=/sbin:/bin:/usr/sbin:/usr/bin 執行文件搜尋路徑
MAILTO=root 若有額外STDOUT,以cmail 將數據送給誰
For details 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) OR sun,mon,tue,wed,thu,fri,sat
          • user-name command to be executed

MAILTO=root;
這個項目是說,當/etc/crontab這個文件中的例行性工作的指令發生錯誤時,或者是該工作執行結果有STDOUT/STDERR時,會將錯誤訊息或者是屏幕顯示的通訊傳給誰,默認是系統直接寄發一個mail 給root,可以改成自己的e-mail

PATH=...;
搜尋文檔的路徑

[ 分 時 日 月 周 身份 指令] 七個字段的設定

/etc/crontab 中必須有身份指定

crond 服務讀取配置文件的位置
/etc/crontab
/etc/cron.d/
/var/spool/cron/

技術分享圖片

技術分享圖片

總結:
文件方式定義crontab
vim /var/spool/cron/用戶名稱 #以某個用戶身份執行cron,文件民稱必須和用戶名稱一致
分 時 天 月 周 動作
vim /etc/cron.d/文件 #設定多個用戶身份執行cron
<分> <時> <天> <月> <周> <用戶> <動作>
系統中的cron任務
/etc/cron.daily/ ##系統每天做執行的程序
/etc/cron.hourly/ ##系統每小時執行的程序
/etc/cron.monthly/ ##系統每月執行的程序
/etc/cron.weekly/ ##系統每星期執行的程序

Linux的例行工作排程(crontab)