linux工作排程的種類:
at,cron
兩種工作排程的方式:
一種是例行性的,就是每隔一定的週期要來辦的事項(通過at實現);
一種是突發性的,就是這次做完以後就沒有的那一種(通過cron實現)。
一、突發性的工作排程(at)
要使用單一工作排程,我們的linux系統上面由atd來負責這個排程的服務,首先啟動/etc/init.d/atd restart
可以設定一下開機時就啟動這個服務,免得每次重新啟動都得再來一次。 chkconfig atd on
at安全管理
/etc/at.deny
將不可以使用at的帳號寫入其中,若未記錄到這個檔案當中的使用者,就可以使用at
at的引數使用
at [-m -v -c -l -d] time
-m 當at的工作完成後,即使沒有輸出資訊,以 email通知使用者該工作已完成
-l 相當於atq,列出所有使用者的at任務
-d 相當於atrm,去掉at的任務
-v 可以用較明顯的時間格式列出at排程中的工作
-c 列出後面接的該項工作的實際命令內容
time:時間格式,這裡可以定義什麼時候要進行at這項工作時間,格式有:
hh:mm ex>04:00
hh:mm yyyy-mm-dd ex>04:00 2012-04-01
hh:mm[am|pm] [month] [date] ex>04:00 march 17
hh:mm[am|pm] +number [minutes|hours|days|weeks]
ex>now +5 minutes 就是說,在現在在加5minutes後進行該工作排程。
編寫例行性工作時應注意:
使用命令時盡量用絕對路徑,
用ctrl+d 結束編寫。
at工作的管理
at並不像cron那樣,可以用crontab -e來編輯自己的工作排程,
當我們發現命令輸入錯誤,就目前來講,只能刪除它。
(因為at的存放檔案並不像crontab,at命令的存放檔案為二進位制檔案[/var/spool/at/,對應的工作排程執行過後,則其二進位制檔案也就消失了],可用od檢視,從簡單使用的角度來講,若命令錯了,直接刪除(atrm)重建)
atq 查詢目前主機上面有多少的at工作排程;
atrm 後加工作序列號,刪除該工作任務。
二、例行性的工作排程(cron)
cron安全管理
/etc/cron.deny
將不可以使用crontab的帳號寫入其中,若未記錄到這個檔案當中的使用者,就可以使用crontab.
crontab的引數使用
-u -e -l -r
-u 只有root才能進行這個任務,也即幫其他使用者新建 、刪除crontab工作高度;
-e 編輯crontab的工作內容;
-l 查閱crontab的工作內容;
-r 刪除所有的crontab的工作內容,若僅要刪除一項 ,請用-e去編輯。
範例:用root的身份在每天的12:00發信給自己
crontab -e
#此時進入vi的編輯器介面。
0 12 * * * mail root -s "at 12:00"
#分 時 日 月 周 ||
預設情況下,任何使用者只要不被列入/etc/cron.deny當中,那麼他就可以直接執行「crontab -e」去編輯自己的例行性命令了。當使用者使用crontab這個命令來新建工作排程之後,該項工作就會被記錄到/vart/spool/cron裡面去了,而且是以帳號來作為判別的。
crontab命令的特殊字元:
* 代表任何時刻都接受的意思
, 代表分隔時段的意思,舉例:要執行工作3:00和6:00時,就是 0 3,6 * * * cdommand
- 代表一段時間範圍內,
/n 即是第隔n單位間隔的意思
舉例:*/5 * * * * command 即是每隔5分鐘執行一次這個命令
可能有時處於停機狀態時,crontab命令就不能執行,這時就需要anacron來可喚醒停機期間的工作任務
anacron 以天為單位或者在開機後立刻進行anacron的操作,它會去檢測停機期間應該進行但是並沒有進行的crontab任務,並將該任務執行一遍,然後anacron就會自動停止了。
由於/etc/cron.daily內的任務比較多,因此我們使用每天進行的任務來解釋一下anacron的運**況好了。anacron若執行「anacron -scron.daily」時,它會這樣執行的:
1.由/etc/anacrontab分析到cron.daily這項工作名稱的天數為1天;
2.由/var/spool/anacron/cron.daily取出最近一次執行anacron的時間戳;
3.由上個步驟與目前的時間比較,若差異天數為1天以上(含1天),就準備進行命令;
4.若準備進行命令,根據/etc/anacrontab的設定將延遲65分鐘;
5.延遲時間過後,開始執行後續命令,即「run-parts /etc/cron.daily"這個命令;
6.執行完畢後,anacron程式結束。
現在你知道為什麼隔了一陣子才將linux開機時,開機過後約1小時左右系統會有一小時段的忙碌,而且硬碟會跑個不停!那是因為anacron正在執行過去crontab未執行的各項工作排程。
程序管理:
jobs -l
注:其實+代表最近被放到後台的工作號碼,-代表最近最後第二個被放置到後台中的工作號碼。而超過最後第三個以後的工作,就不會有+、-符號存在了!
工作狀態是stopped,若工作狀態為done,說明已經結束了,即便是最近沒有+號,當你在執行一次jobs,就已經看不到該工作了。
程序的執行順序
priority與nice
pri 值越低代表越優先,這個pri的值是由核心動態調整的,使用者無法直接調整pri值,
可通過nice值,
pri(new)=pri(old)+nice
nice值可以調整的範圍為-20—19;(root)
普通使用者調整的範圍為0—19
nice 是對即將執行的命令
#用root給乙個nice值為-5,用於執行vi,並檢視該程序!
[root@www ~]nice -n -5 vi &
renice 是對正在執行的執行
renice [number] pid
[root@www ~]renice 10 18625
kill -signal pid
可以幫我們將這個signal傳送給某個工作(%jobnumber)或者是某個pid(直接輸入數字。要再次強調的是:kill後面直接加數字與加上%jobnumber的情況是不同的!這個很重要。因為工作控制中有1號工作,但是pid1號則是專指「init」這個程序。你怎麼可以將init關閉呢?關閉init,你的系統就死掉了啊!所以記得那個%是專門用在工作控制的。
舉例:如下圖:用vim在後台執行,用jobs檢視,並想通過kill 1來刪除該工作號,發現並不能成功,會彈出說是不允許的操作,因為kill 1並不是殺掉1號工作,而是關閉init,即系統的主程序,當然是不允許的了。
應該用kill %1,就能正確關閉1號工作了。
killall -signal命令名稱
由於kill後面必須要加上pid(或者是jobnumer),所以,通常kill都會配合ps,pstre等命令,因為我們必須要找到相對應的那個程序的id。但是,如此一來,很麻煩,可以直接用killall 其後直接跟命令名稱,
killall -1 httpd 可以讓pid重新讀取自己的配置檔案,類似重新啟動httpd服務
也可以用 pkill -1 httpd
killall -9 httpd 強制終止所有以httpd啟動的程序;
killall -i bash 依次詢問每乙個bash程序是否需要被終止進行。
總之,要刪除某個程序,我們可以使用pid或者啟動該程序的命令名稱,而如果要刪除某個服務呢,最簡單的方法就是利用killall,因為它可以將系統當中所有以某個命令名稱啟動的程序全部刪除。
linux例行性工作
linux工作排程種類 at,cron at at是乙個可以處理僅執行一次就結束排程的命令,不過要執行at時,必須要有atd這個服務。etc init.d atd restart atd啟動 at這個命令生成所要執行的工作,並將這個工作已文字的方式寫入 var spool at這個目錄內,該工作便能...
Linux 例行性工作
什麼是例行性工作?其實對於例行性工作而言就是在當前環境下週期性進行的必須工作。在linux下,有2種例行性工作種類 一種是突發性,做完以後就沒有的那種 at at是個可以處理僅執行一次就結束排程的命令,不過要執行at,必須要有atd這個服務。在某些linux版本中這個服務專案不是預設開啟的,所以我們...
linux例行性工作排程
什麼是例行性工作?比如太陽每天從東方公升起,學校的上課鈴總是不厭煩的定時響起,老媽的喊叫聲總在每天的固定時刻叫你起床等。這些都是例行性工作。linux系統也有自己的定時要辦的事情,比如日誌檔案的輪替,whatis資料庫的建立等等。linux例行性工作分一次性的 at 和迴圈執行的 cron 本篇部落...