Linux:後臺執行程式

edwardking888發表於2010-11-17

今天同事要執行一個作業,要求一直在linux伺服器後臺執行,於是想起使用nohup 命令。

at

at命令允許使用者向cron守護程式提交作業,使其在稍後的時間執行。一旦一個作業被提交,at命令將會保留所有當前的環境變數,包括路徑,不像crontab只提供預設的環境。該作業的所有輸出都將以電子郵件的形式傳送給使用者,除非你對其輸出進行了重定向。

crontab一樣,根使用者可以通過/etc目錄下的at.allowat.deny檔案來控制哪些使用者可以使用at命令,哪些使用者不行。

at命令格式:at [-f script] [-m -l -r] [time] [date]
-f
:表示要提交的指令碼或命令。

-l:列出當前所有等待執行的作業。

-r:清除作業,如果想清除某個作業,要提供相應的作業標識(ID)。

-m:作業完成後給使用者發郵件。

timeat命令的時間格式非常靈活,可以是HHHHHMMHHMMHM,其中HM分別是小時和分鐘。還可以使用a.mp.m

例子:

$ at 23:59
at> find /tmp -mtime +3 | xargs rm -rf

ctrl + D結束編輯

以下時間格式,at命令都是可以接受的:

at 10.47am

at now + 1 hour
如果希望向at命令提交一個shell指令碼,可以使用類似下面命令:

at 10:00am -f /home/wang/backdb.sh                                                                                                                          

&

當在前臺執行某個作業時,不想被該作業佔據終端,可以使用&命令,形式為:command &

這樣就把該作業放到後臺執行。

不過作業在後臺執行一樣會將結果輸出到螢幕上,我們可以使用輸出重定向到某個檔案:command >out.command 2>&1 &

上面這個例子,就會將命令的標準輸出和錯誤輸出都重定向到out.command檔案中。其中,2:表示標準錯誤輸出,1:表示標準輸出。2>&1的意思就是標準的錯誤輸出也重定向到out.command2檔案中。

另外,當一個命令在後臺執行的時候,可以用提交命令時所得到的程式號來監控它的執行。在

前面的例子中,我們可以按照提交ps 1時得到的程式號,用ps命令和grep命令列出這個程式:ps | grep 程式號

記住,在用ps命令列出程式時,它無法確定該程式是執行在前臺還是後臺。

如果想殺死後臺程式,可以執行kill 程式號;或者:kill -9 程式號

nohup

如果你正在執行一個程式,而且你想要在退出帳戶時該程式繼續執行,那麼可以使用nohup命令。它是不掛起的意思。

命令形式為:nohup command &

尤其是當執行一個擁有多條命令的指令碼時,看一個例子:
假如有一個指令碼(append.sh)擁有多條shell命令:

nohup ./append.sh > out.append 2>&1 &

那麼這個指令碼的所有標準輸出和標準錯誤輸出都會重定向到out.append檔案中。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-678325/,如需轉載,請註明出處,否則將追究法律責任。

相關文章