linux後台執行和開機啟動篇 一

2021-07-06 06:18:44 字數 1878 閱讀 7882

本篇將會講解

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...