Linux例行性工作at,cron,程序管理

2021-09-21 03:44:13 字數 4232 閱讀 2211

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 本篇部落...