- Linux工作調度的種類
- at:at是個可以處理僅執行一次就結束調度的命令,不過要執行at,必須有atd服務。某些新版的distributions中,atd可能默認沒有啓動。
- crontab:crontab所設置的工作將會循環一直進行下去。這個命令除了可以使用命令執行外,也可以編輯/etc/crontab來支持。讓crontab生效的服務則是crond這個服務。
- Linux上常見的例行工作
- 進行日誌文件的輪替(log rotate):適時將日誌文件數據挪一挪,讓舊數據與新數據分別存放,則比較可以有效地記錄日誌信息。
- 日誌文件分析logwatch的任務:系統發生軟件問題,硬件錯誤,絕大部分的錯誤信息都會被記錄在日誌文件中,因此係統管理員的重要任務之一就是分析日誌文件。所以CentOS提供了logwatch來主動分析日誌信息。
- 新建locate數據庫:locate命令是通過已經存在的文件名數據庫來進行系統文件名的查詢。文件名數據庫是放置再/var/lib/mlocate/中。系統更新這個數據庫就是通過update。
- whatis數據庫的建立:whatis是與man page有關的一個查詢命令,不過要使用whatis命令時,必須擁有whatis數據庫,而這個數據庫也是通過系統例行工作調度來自動執行的。
- RPM軟件日誌文件的新建/RPM是一種軟件管理的機制。由於系統可能會經常更改軟件,包括軟件的新安裝,非經常性更新等,都會造成軟件文件名的區別。爲了方便追蹤,系統幫我們將文件名做個排序的記錄。
- 刪除臨時文件:某些軟件再運行時會生成臨時文件,但是當這個軟件關閉的時候,臨時文件可能不會主動刪除。系統通過例行工作調度執行名爲tmpwatch的命令來刪除這些臨時文件。
- 與網絡服務有關的分析行爲:如果安裝了WWW服務器軟件,那麼你的Linux系統通常就會主動分析該軟件的日誌文件,同時某些認證的網絡信息是否過期的問題,這些Linux都會自動幫你檢查。
- 僅執行一次的工作調度
-
atd的啓動和at運行的方式
要使用單一工作調度,必須開啓atd[root@www~]# /etc/init.d/atd restart <==啓動atd [root@www~]# chkconfig atd on <==設置開機時啓動這個服務,免得每次重新啓動都要再來一次
-
at的運行方式
我們用at命令來生成所要運行的工作,並將這個工作以文本文件的方式寫入/var/spool/at目錄內,該工作便能等待atd這個服務的取用與執行了。- 我們可以用/etc/at.allow這個文件,寫在這個文件中的用戶才能使用at,沒有在這個文件中的用戶則不能使用at(即使沒有寫在at.deny中)
- 如果/etc/at.allow不存在,就尋找/etc/at.deny這個文件,若寫在這個at.deny的用戶則不能使用at,而沒有在這個at.deny文件中的用戶就可以使用at
- 如果兩個文件都不存在,那麼只有root可以使用at命令
-
實際運行單一工作調度
[root@www~]# at [-mldv] TIME [root@www~]# at -c 工作號碼
參數 含義 -m 當at工作完成後,即使沒有輸出信息,以email通知用戶該工作完成 -l at -l相當於atq,列出目前系統上面的所有該用戶的at調度 -d at -d相當於atrm,可以取消一個在at調度中的工作 -v 可以使用較明顯的時間格式列出at調度中的任務列表 -c 可以列出後面接的該項工作的實際命令內容 TIME時間格式:這裏可以定義什麼時候要進行at這項工作的時間
格式 含義 HH:MM 幾點幾分,如果今天已經超過了,就要明天這個時候進行 ex>04:00 HH:MM YYYY-MM-DD 強制規定在某年某月某日某一天的特殊時刻進行該工作 ex>04:00 2019-01-17 HH:MM[am|pm] [Month] [Date] 強制規定在某年某月某日某一天的特殊時刻進行該工作 ex>04:00 am March 17 HH:MM[am|pm] + number [minutes|hours|days|weeks] 在某個時間點再加上幾個時間之後,ex>04pm + 3 days [root@www~]# at now + 5 minutes #執行at會進入at shell環境,讓你執行多重命令 at> /bin/mail root -s "testing at job" < /root/.bashrc at> <EOT> <==這裏輸入[ctrl]+d就會出現<EOF>,代表結束 job 4 at 2009-03-14 15:38 #說明第4個at工作將會在2009年/03/14的15:38進行
[root@www~]# at 23:00 2009-03-07 at> /bin/sync at> /bin/sync at> /sbin/shutdown -h now at> <EOT> job 5 at 2009-03-17 23:00
注意,如果at shell命令內沒有任何信息輸出,那麼at默認不會發Email給執行者,如果想讓at命令無論如何都要發送Email,那麼就要用at -m命令。
由於at在工作調度的使用上,系統會將該項at工作獨立出你的bash環境,直接交給系統的atd程序來接管,因此,當你執行了at的工作之後就可以立刻脫機,剩下的工作就完全交給Linux管理即可。
at的工作管理,執行了at之後才發現命令錯誤,可以利用atq和atrm把它刪除。[root@www~]# atq [root@www~]# atrm [jobnumber] 例子: 查詢目前主機上有所少個at工作調度 [root@www~]# atq 5 2009-03-17 23:00 a root #上面的意思是在2009/03/17的23:00有一項工作,該工作命令執行者爲root,而且,該項工作的工作號碼是5 [root@www~]# atrm 5 #說明刪除工作號爲5的工作 [root@www~]# atq #沒有顯示任何信息,說明工作已經被刪除
如果你是在一個非常忙碌的系統下運行at,那麼你可以通過batch指定你的工作在系統較閒的時候進行。
batch可以指定在系統有空時才進行後臺任務,它會在CPU工作負載小於0.8的時候,才進行你所執行的工作任務。負載的意思是CPU在單一時間點所負責的工作數量,不是CPU的使用率。#同樣進行關機操作,但是如果當時系統負載太高,則暫緩執行 [root@www~]# batch 23:00 2009-03-17 at> sync at> sync at< shutdown -h now at> <EOT> job 6 at 2009-03-17 23:00
-
- 循環執行的例行性工作調度
相對於at是僅執行一次的工作,循環執行的例行性工作調度則是由cron(crond)這個系統服務來控制的。- 用戶設置
/etc/cron.allow 將可以使用crontab的賬號寫入其中,若不在這個文件內的用戶則不可使用crontab。
/etc/cron.deny 將可以使用crontab的賬號寫入其中,若未記錄到這個文件當中的用戶則可以使用crontab
以優先級來說,cron.allow的優先級高於cron.deny。當用戶使用crontab這個命令來新建工作調度之後,該項工作就會被記錄到/var/spool/cron裏面,而且是以賬號來作爲判別。舉例,用戶名爲dmtsai使用crontab後,他的工作會被記錄到/var/spool/cron/dmtsai裏面。注意,不要使用vi直接編輯文件,因爲可能由於輸入語法錯誤,會導致無法執行cron。
crontab參數參數 含義 -u 只有root才能進行這個任務,也即幫其他用戶新建/刪除crontab工作調度 -e 編輯crontab的工作內容 -l 查閱crontab工作內容 -r 刪除所有crontab的工作內容,若要刪除一項,請用-e去編輯 [root@www~]# crontab -e #用dmtsai的身份在每天的12:00發信給自己 #此時會進入vi編輯界面讓你編輯工作,注意每一項工作都是一行 0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.basgrc #分 時 日 月 周 |<========命令串=================>|
代表意義 分鐘 小時 日期 月份 周 命令 數字範圍 0~59 0~23 1~31 1~12 0~7 命令 特殊字符 代表意義 * 任何時刻都接受的意思。如果日,月,周都是*號,代表不論何月何日的星期幾 , 代表分隔時段的意思,舉例子,如果執行工作是3:00到6:00,所以就是0 3,6 * * * command - 代表一段時間範圍,舉例,8點到12點之間每小時的20分都進行一項工作 20 8-12 * * * command /n(斜線) 那個n代表數字,即是每隔n單位間隔的意思,例如每五分鐘進行一次,則*/5 * * * * command 也可以把*/5寫成0-59/5 - 系統的配置文件:/etc/crontab
crontab -e 這個命令是針對用戶,如果是系統的例行性任務,就不需要以crontab -e 來管理你的例行性工作調度,只需要編輯/etc/crontab這個文件就可以。其中有一點需要注意,crontab -e 這個crontab其實是/usr/bin/crontab這個執行文件,但是/etc/craontab是一個純文本文件。
基本上,cron這個服務的最低檢測限制就是分鐘,所以cron會每分鐘去讀取一次/etc/crontab與/var/spool/cron裏面的數據內容,因此,只要你編輯完/etc/crontab這個文件,並且將它保存之後,那麼cron的設置就會自動會來執行。
查看/etc/crontab的內容
在crontab裏面一些字段的含義[root@www~]# cat /etc/crontab SHELL=/bin/bash <==使用哪種shell接口 PATH=/sbin:/bin:/usr/sbin:/usr/bin <==執行文件查找路徑 MAILTO=root <==若有額外STDOUT,以email將數據送給誰 HOME=/ <==默認此shell的主文件夾所在 #run-parts 01 * * * * root run-parts /etc/cron.hourly <==每小時 02 4 * * * root run-parts /etc/cron.daily <==每天 22 4 * * 0 root run-parts /etc/cron.weekly <==每週日 42 4 1 * * root run-parts /etc/cron.weekly <==每個月1號
字段 含義 MAILTO=root 當/etc/crontab這個文件中的例行性工作的命令發生錯誤時,或者是該工作 PATH=… 這裏輸入的是執行文件的查找路徑,使用默認的路徑設置就已經足夠了 01 * * * * root run-parts /etc/cron.hourly 如果想讓系統每小時主動幫你執行某個命令,就將該命令寫成script,並將該文件放置到/etc/cron.hourly/目錄下即可
- 用戶設置
- 可喚醒停機期間的工作任務
- 如果Linux主機是24小時全天,全年無休的服務器,那麼你只要ad與crond這兩個服務來管理例行工作即可,但是如果你的服務器並非24小時不關機,那麼就需要用anacron。
anacron不是用來指定何時執行任務的,而是以天爲單位或者是在開機之後立刻進行anacron的操作的,它會去檢測停機期間應該進行但是沒有進行的crontab任務,並將該任務執行一遍,然後anacron就會自動停止。anacron其實也是通過crontab來進行的,因此anacron運行的時間通常有兩個,一個是系統開機期間運行,一個是寫入crontab的調度中 - anacron與/etc/anacrontab
anacron其實是一個程序並非一個服務。基本上anacron的語法如下[root@www~]# anacron [-sfn] [job] [root@www~]# anacron -u [job]
參數 含義 -s 開始連續執行各項工作,會依據時間記錄文件的數據判斷是否進行 -f 強制進行,而不去判斷時間記錄文件的時間戳 -n 立刻進行未進行的任務,而不延遲等待時間 -u 僅更新時間記錄文件的時間戳,不進行任何工作 job 由/etc/anacrontab定義的各項工作名稱
- 如果Linux主機是24小時全天,全年無休的服務器,那麼你只要ad與crond這兩個服務來管理例行工作即可,但是如果你的服務器並非24小時不關機,那麼就需要用anacron。
Linux例行工作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.