?? 進程管理及作業控制.htm
字號:
<br>
<br>這樣一來,at命令將使用文件中的命令序列,屏幕顯示如下:
<br>
<br>Warning:command will be executed using /bin/sh.
<br>
<br>job 2 at 1999-12-25 02:00
<br>
<br>當然也可以采用以下命令:
<br>
<br>$ at< /tmp/printjob 2:00 12/25/99
<br>
<br>來完成同樣的任務。也就是使用輸入重定向的辦法將文件定向為命令輸入。
<br>
<br>batch命令
<br>
<br>batch 用低優先級運行作業,該命令幾乎和at命令的功能完全相同,唯一的區別在于,at命令是在指定時間,很精確的時刻執行指定命令;而batch卻是在系統負載較低,資源比較空閑的時候執行命令。該命令適合于執行占用資源較多的命令。
<br>
<br>batch命令的語法格式也和at命令十分相似,即
<br>
<br>batch [-V] [-q 隊列] [-f 文件名] [-mv] [時間]
<br>
<br>具體的參數解釋請參考at命令。一般地說,不用為batch命令指定時間參數,因為batch本身的特點就是由系統決定執行任務的時間,如果用戶再指定一個時間,就失去了本來的意義。
<br>
<br>[例6] 使用例4,鍵入:
<br>
<br>$ batch
<br>
<br>at> find / -name *.txt|lpr
<br>
<br>at> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy
<br>
<br>現在這個命令就會在合適的時間進行了,進行完后會發回一個信息。
<br>
<br>仍然使用<Ctrl+d>組合鍵來結束命令輸入。而且batch和at命令都將自動轉入后臺,所以啟動的時候也不需要加上&符號。
<br>
<br>cron命令
<br>
<br>前面介紹的兩條命令都會在一定時間內完成一定任務,但是要注意它們都只能執行一次。也就是說,當指定了運行命令后,系統在指定時間完成任務,一切就結束了。但是在很多時候需要不斷重復一些命令,比如:某公司每周一自動向員工報告頭一周公司的活動情況,這時候就需要使用cron命令來完成任務了。
<br>
<br>實際上,cron命令是不應該手工啟動的。cron命令在系統啟動時就由一個shell腳本自動啟動,進入后臺(所以不需要使用&符號)。一般的用戶沒有運行該命令的權限,雖然超級用戶可以手工啟動cron,不過還是建議將其放到shell腳本中由系統自行啟動。
<br>
<br>首先cron命令會搜索/var/spool/cron目錄,尋找以/etc/passwd文件中的用戶名命名的crontab文件,被找到的這種文件將載入內存。例如一個用戶名為foxy的用戶,它所對應的crontab文件就應該是/var/spool/cron/foxy。也就是說,以該用戶命名的 crontab文件存放在/var/spool/cron目錄下面。cron命令還將搜索/etc/crontab文件,這個文件是用不同的格式寫成的。
<br>
<br>cron啟動以后,它將首先檢查是否有用戶設置了crontab文件,如果沒有就轉入“休眠”狀態,釋放系統資源。所以該后臺進程占用資源極少。它每分鐘 “醒”過來一次,查看當前是否有需要運行的命令。命令執行結束后,任何輸出都將作為郵件發送給crontab的所有者,或者是/etc/crontab文件中MAILTO環境變量中指定的用戶。
<br>
<br>上面簡單介紹了一些cron的工作原理,但是cron命令的執行不需要用戶干涉;需要用戶修改的是crontab中要執行的命令序列,所以下面介紹crontab命令。
<br>
<br>crontab命令
<br>
<br>crontab命令用于安裝、刪除或者列出用于驅動cron后臺進程的表格。也就是說,用戶把需要執行的命令序列放到crontab文件中以獲得執行。每個用戶都可以有自己的crontab文件。下面就來看看如何創建一個crontab文件。
<br>
<br>在/var/spool/cron下的crontab文件不可以直接創建或者直接修改。crontab文件是通過crontab命令得到的。現在假設有個用戶名為foxy,需要創建自己的一個crontab文件。首先可以使用任何文本編輯器建立一個新文件,然后向其中寫入需要運行的命令和要定期執行的時間。
<br>
<br>然后存盤退出。假設該文件為/tmp/test.cron。再后就是使用crontab命令來安裝這個文件,使之成為該用戶的crontab文件。鍵入:
<br>
<br>crontab test.cron
<br>
<br>這樣一個crontab 文件就建立好了。可以轉到/var/spool/cron目錄下面查看,發現多了一個foxy文件。這個文件就是所需的crontab 文件。用more命令查看該文件的內容可以發現文件頭有三行信息:
<br>
<br>#DO NOT EDIT THIS FILE -edit the master and reinstall.
<br>
<br>#(test.cron installed on Mon Feb 22 14:20:20 1999)
<br>
<br>#(cron version --$Id:crontab.c,v 2.13 1994/01/17 03:20:37 vivie Exp $)
<br>
<br>大概意思是:
<br>
<br>#切勿編輯此文件——如果需要改變請編輯源文件然后重新安裝。
<br>
<br>#test.cron文件安裝時間:14:20:20 02/22/1999
<br>
<br>如果需要改變其中的命令內容時,還是需要重新編輯原來的文件,然后再使用crontab命令安裝。
<br>
<br>可以使用crontab命令的用戶是有限制的。如果/etc/cron.allow文件存在,那么只有其中列出的用戶才能使用該命令;如果該文件不存在但 cron.deny文件存在,那么只有未列在該文件中的用戶才能使用crontab命令;如果兩個文件都不存在,那就取決于一些參數的設置,可能是只允許超級用戶使用該命令,也可能是所有用戶都可以使用該命令。
<br>
<br>crontab命令的語法格式如下:
<br>
<br>crontab [-u user] file
<br>
<br>crontab [-u user]{-l|-r|-e}
<br>
<br>
<br>
<br>第一種格式用于安裝一個新的crontab 文件,安裝來源就是file所指的文件,如果使用“-”符號作為文件名,那就意味著使用標準輸入作為安裝來源。
<br>
<br>-u 如果使用該選項,也就是指定了是哪個具體用戶的crontab 文件將被修改。如果不指定該選項,crontab 將默認是操作者本人的crontab ,也就是執行該crontab 命令的用戶的crontab 文件將被修改。但是請注意,如果使用了su命令再使用crontab 命令很可能就會出現混亂的情況。所以如果是使用了su命令,最好使用-u選項來指定究竟是哪個用戶的crontab文件。
<br>
<br>-l 在標準輸出上顯示當前的crontab。
<br>
<br>-r 刪除當前的crontab文件。
<br>
<br>-e 使用VISUAL或者EDITOR環境變量所指的編輯器編輯當前的crontab文件。當結束編輯離開時,編輯后的文件將自動安裝。
<br>
<br>[例7]
<br>
<br># crontab -l #列出用戶目前的crontab。
<br>
<br>10 6 * * * date
<br>
<br>0 */2 * * * date
<br>
<br>0 23-7/2,8 * * * date
<br>
<br>#
<br>
<br>在crontab文件中如何輸入需要執行的命令和時間。該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最后一個域是要被執行的命令。每個域之間使用空格或者制表符分隔。格式如下:
<br>
<br>minute hour day-of-month month-of-year day-of-week commands
<br>
<br>第一項是分鐘,第二項是小時,第三項是一個月的第幾天,第四項是一年的第幾個月,第五項是一周的星期幾,第六項是要執行的命令。這些項都不能為空,必須填入。如果用戶不需要指定其中的幾項,那么可以使用*代替。因為*是統配符,可以代替任何字符,所以就可以認為是任何時間,也就是該項被忽略了。在表4-1 中給出了每項的合法范圍。
<br>
<br>
<br>
<br>表4-1 指定時間的合法范圍
<br>
<br>時間
<br>
<br>合法值
<br>
<br>minute
<br>
<br>00-59
<br>
<br>hour
<br>
<br>00-23,其中00點就是晚上12點
<br>
<br>day-of-month
<br>
<br>01-31
<br>
<br>month-of-year
<br>
<br>01-12
<br>
<br>day-of-week
<br>
<br>0-6,其中周日是0
<br>
<br>
<br>
<br>這樣用戶就可以往crontab 文件中寫入無限多的行以完成無限多的命令。命令域中可以寫入所有可以在命令行寫入的命令和符號,其他所有時間域都支持列舉,也就是域中可以寫入很多的時間值,只要滿足這些時間值中的任何一個都執行命令,每兩個時間值中間使用逗號分隔。
<br>
<br>[例8]
<br>
<br>5,15,25,35,45,55 16,17,18 * * * command
<br>
<br>這就是表示任意天任意月,其實就是每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。
<br>
<br>[例9] 在每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。那么在crontab 文件中就應該寫入如下字段:
<br>
<br>00 15 * * 1,3,5 shutdown -r +5
<br>
<br>然后將該文件存盤為foxy.cron,再鍵入crontab foxy.cron安裝該文件。
<br>
<br>[例10] 每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:
<br>
<br>10,40 * * * * innd/bbslink
<br>
<br>[例11] 每小時的1分執行用戶目錄下的bin/account這個指令:
<br>
<br>1 * * * * bin/account
<br>
<br>[例12] 每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔):
<br>
<br>20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)
<br>
<br>[例13] 每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,并把結果添加在mm.txt這個文件之后(mm.txt文件位于用戶自己的目錄位置)。
<br>
<br>12,55 3 4-9 1,4 * /bin/rm -f expire.1st>>mm.txt
<br>
<br>[例14] 我們來看一個超級用戶的crontab文件:
<br>
<br>#Run the ‘atrun’ program every minutes
<br>
<br>#This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’.
<br>
<br>0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
<br>
<br>40 7 * * * updatedb
<br>
<br>8,10,22,30,39,46,54,58 * * * * /bin/sync
<br>
<br>進程的掛起及恢復命令bg、fg
<br>
<br>作業控制允許將進程掛起并可以在需要時恢復進程的運行,被掛起的作業恢復后將從中止處開始繼續運行。只要在鍵盤上按<ctrl+z>,即可掛起當前的前臺作業。
<br>
<br>[例15]
<br>
<br>$ cat > text.file
<br>
<br><ctrl+z>
<br>
<br>[1] + stopped cat > text.file
<br>
<br>$ jobs
<br>
<br>[1]+ stopped cat > text.file
<br>
<br>在鍵盤上按<ctrl+z>后,將掛起當前執行的命令cat。使用jobs命令可以顯示shell的作業清單,包括具體的作業、作業號以及作業當前所處的狀態。
<br>
<br>恢復進程執行時,有兩種選擇:用fg命令將掛起的作業放回到前臺執行;用bg命令將掛起的作業放到后臺執行。
<br>
<br>[例16]用戶正在使用Emacs,突然需要查看系統進程情況。就首先使用<Ctrl+z>組合鍵將Emacs進程掛起,然后使用bg命令將其在后臺啟動,這樣就得到了前臺的操作控制權,接著鍵入“ps –x”查看進程情況。查看完畢后,使用fg命令將Emacs帶回前臺運行即可。其命令格式為:
<br>
<br><Ctrl+z>
<br>
<br>$ bg emacs
<br>
<br>$ ps –x
<br>
<br>$ fg emacs
<br>
<br>默認情況下,fg和bg命令對最近停止的作業進行操作。如果希望恢復其他作業的運行,可以在命令中指定要恢復作業的作業號來恢復該作業。例如:
<br>
<br>$ fg 1
<br>
<br>cat > text.file
<br>
<br>靈活使用上述命令,將給自己帶來很大的方便。
<br>
<br> <br></p></td></tr></table></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFD" height="20"><table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="100%"><p align="right" class="9"><a href="常用配置.htm">上一頁</a> <a href="index.html">目錄</a> <a href="命令大集合.htm">下一頁</a> </td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center></div>
<p align=center><font size=1>Made by an Unre<!--2005-1-20 9:46:03 -->gistered version of <a href=http://www.etextwizard.com target=_blank>eTextWizard</a> V 1.98</font></p></body>
</html>
<!-- Made by an Unregistered version of eTextWizard V 1.98-->
<!--本網頁文件由電子書制作工具“電子文檔處理器”未注冊版本的Txt2Html功能自動生成 -->
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -