本篇將會講解
linux
的如何後台執行乙個程式以及開機啟動機制和如果設定開機啟動,同時會提供一些參考資料。
先說如何後台執行,確切的手勢終端關閉後終端中啟動的程序不被結束。
我們都知道
linux
的程式是以終端為單位的。如果在終端中啟動了某個程式,當終端關閉後,相應的程式也會終止。
為什麼會這樣呢?因為
linux
中某個終端啟動的程序都是其子程序,當終端關閉後,
linux
就會收到
hung up
(掛**的意思)的訊號,然後把對應終端的子程序都關閉,然後就沒有然後了。。。
所以要使某個程序不被結束,有兩種辦法: 1.
讓linux
忽略終端的
hung up
訊號,不關閉程序;
2.讓此程序變為終端的非子程序。
第一種的實現方案就是
nohup
命令。例如要啟動
jboss
,可以nohup ./run.sh &
。這樣就可以了,結尾的「
&」符號表示後台啟動
jboss
,從而不影響繼續執行其他命令。
但這樣有乙個問題,
nohup
命令雖然可以讓
linux
「放過」這個程序,但是
nohup
會同時把程序的控制台輸出重定向到
nohup.txt
下(預設是這個檔案),當然可以重定向為其他的檔案,但是輸出總會有的。 如果
jboss
執行很長時間,而且如果有很多控制台輸出的話,
nohup.txt
檔案就會變的很大很大。
通常專案中的日誌都會輸出到特定的日誌檔案或者輸出到資料庫中,也就是說控制台的輸出對於程式的意義不大,那麼可不可以拋棄掉這些輸出呢?答案是肯定的。
這裡講解一下
linux
的重定向(注意,是
linux
的重定向,不是針對
nohup
)。0、1和2分別表示標準輸入、標準輸出和標準錯誤資訊輸出,可以用來指定需要重定向的標準輸入或輸出。
在一般使用時,預設的是標準輸出,既1.當我們需要特殊用途時,可以使用其他標號。例如,將某個程式的錯誤資訊輸出到log檔案中:./program 2>log。這樣標準輸出還是在螢幕上,但是錯誤資訊會輸出到log檔案中。
另外,也可以實現0,1,2之間的重定向。2>&1:將錯誤資訊重定向到標準輸出。
linux下還有乙個特殊的檔案/dev/null,它就像乙個無底洞,所有重定向到它的資訊都會消失得無影無蹤。
結合nohup
,我們可以這樣
nohup ./run.sh >/dev/null &
這是最簡單的一種方式,既保證了程式能夠一直後台執行,又能保證不會產生太大的
nohup.txt
檔案。
第二種方式就是利用的
linux
的乙個機制,讓程式在
subshell
中執行,方法很簡單,將命令用括號() 括起來即可。
ps -ef | grep test
可以看到
run.sh
的父程序為
1,不是當前終端了,這樣就能忽略
hung up
訊號。
當然linux
還可以動態的讓程式後台執行或不被
hung up
訊號關閉,例如disown命令,
setid
命令等。
可以參考這篇文章:
下篇文章繼續講解
linux
的開機啟動機制。
Windows Redis 開機啟動後台執行
1.從 redis 的安裝目錄進入 cmd 2.在 cmd 中輸入,將redis繫結為 windows 服務,並設定為後台啟動 redis server service install redis.windows.conf loglevel verbose 安裝redis服務 3.啟動服務 redi...
開機啟動 Linux開機自啟和執行級別
主要用來啟動一些系統服務,根據runlevel執行rcx.d,而在rcx.d中都會在最後呼叫rc.local 一般情況下,大多數的linux作業系統使用 etc init.d 或 etc rc.d init.d 下的指令碼來配置應用程式的自動啟動。例如,在某些linux系統中,corn程式通過 et...
linux服務開機啟動和執行級別
用chkconfig將自編譯設定為系統服務的時候,httpd服務不支援chkconfig。以下是具體的解決過程,希望對大家有用 寫了指令碼,想用命令chkconfig載入自啟動.提示 服務不支援chkconfig 原來是自己寫的指令碼時,忘記寫兩行了.開頭一般要這樣寫 bin bash chkcon...