Linux工做調度的種類:at,cronlinux
兩種工做調度的方式:vim
一種是例行性的,就是每隔必定的週期要來辦的事項(經過at實現);
一種是突發性的,就是此次作完之後就沒有的那一種(經過cron實現)。
1、突發性的工做調度(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)重建)
atrm 後加工做序列號,刪除該工做任務。
2、例行性的工做調度(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" </root/.bashrc
#分 時 日 月 周 |<-------------命令串------------------>|
默認狀況下,任何用戶只要不被列入/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,由於它能夠將系統當中全部以某個命令名稱啓動的進程所有刪除。