天天看點

Linux 項目在終端關閉後,可以在背景運作的指令(一)使用Linux重定向解決nohup.out無寫權限問題

一、Linux 下使用 nohup

Unix/Linux下一般比如想讓某個程式在背景運作,很多都是使用 & 在程式結尾來讓程式自動運作。

比如我們要運作weblogic在背景:

./startWebLogic.sh &

但是加入我們很多程式并不象weblogic一樣做成守護程序,可能我們的程式隻是普通程式而已,一般這種程式使用 &結尾。

但是如果終端關閉,那麼程式也會被關閉。

但是為了能夠背景運作,那麼我們就可以使用nohup這個指令。

比如我們有個startWebLogic.sh需要在背景運作,那麼就使用nohup:

nohup ./startWebLogic.sh &

提示:

[~]$ appending output to nohup.out

嗯,證明運作成功,同時把程式運作的輸出資訊放到目前目錄的 nohup.out 檔案中去。

nohup 指令

用途:LINUX指令用法,不挂斷地運作指令。

文法:nohup Command [ Arg ... ] [ & ]

描述:nohup 指令運作由 Command 參數和任何相關的 Arg 參數指定的指令,忽略所有挂斷(SIGHUP)信号。

在登出後使用 nohup 指令運作背景中的程式。要運作背景中的 nohup 指令,添加 & ( 表示“and”的符号)到指令的尾部。

nohup: ignoring input and appending output to `nohup.out'  忽略輸入輸出,将資訊化資訊記錄到nohup.out檔案中。

二、使用Linux重定向解決nohup.out無寫權限問題

■場景

執行nohup指令的時候,經常會出現下面這種沒有寫入權限的錯誤。

nohup: ignoring input and appending output to `nohup.out'

nohup: failed to run command `/etc/nginx_check.sh': Permission denied

■linux重定向:

0、1和2分别表示标準輸入、标準輸出和标準錯誤資訊輸出,可以用來指定需要重定向的标準輸入或輸出。

在一般使用時,預設的是标準輸出,既1。當我們需要特殊用途時,可以使用其他标号。

例如,将某個程式的錯誤資訊輸出到log檔案中:./program 2>log。

這樣标準輸出還是在螢幕上,但是錯誤資訊會輸出到log檔案中。

另外,也可以實作0,1,2之間的重定向。2>&1:将錯誤資訊重定向到标準輸出。

Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重定向到它的資訊都會消失得無影無蹤。

這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以将輸出重定向到/dev/null。

如果想要正常輸出和錯誤資訊都不顯示,則要把标準輸出和标準錯誤都重定向到/dev/null, 例如:

# ls 1>/dev/null 2>/dev/null

還有一種做法是将錯誤重定向到标準輸出,然後再重定向到 /dev/null,例如:

# ls >/dev/null 2>&1

注意:此處的順序不能更改,否則達不到想要的效果,此時先将标準輸出重定向到 /dev/null,

然後将标準錯誤重定向到标準輸出。

由于标準輸出已經重定向到了/dev/null,是以标準錯誤也會重定向到/dev/null,于是一切靜悄悄。

■關于nohup

在使用nohup指令的時候,經常由于輸出nohup.out的路徑沒有寫入權限,而無法使用nohup。

這是可以使用Linux重定向的方法,将nohup.out重定向至一個有寫入權限的路徑,或者直接扔到/dev/null中。

nohup ./program >/dev/null 2>/dev/null &

或者

nohup ./program >/dev/null 2>&1 &

三、使用nohup設定背景程序

引言: 有時候需要在Linux上設定一個背景程序,但是當你關閉terminal之時,它會被系統kill掉,那該如何來實作其背景程序能一直運作下去呢?

使用方式:

nohup command-with-options &

當在螢幕上敲擊上述指令之後,螢幕上會出現如下資訊:

$ nohup: ignoring input and appending output to `nohup.out’

敲擊回車,就退出了nohup.out目前的界面,進入正常的指令行。

輸出日志資訊:

接下來的輸出的日志資訊,将輸出到nohup.log.即将螢幕上輸出的日志資訊直接輸出到nohup.log檔案。

背景程序的标志符:

如果一個指令隻使用&來辨別,則表示其在目前Session中,運作在背景。如果目前Session關閉或者目前的terminal工具關閉,則其附屬的程序将會關閉。

正常運作的背景程序都是需要nohup與&,兩者并行使用的,方可保證其在背景正常運作。

轉自:https://blog.csdn.net/blueheart20/article/details/78226066

           https://www.cnblogs.com/quchunhui/p/5582371.html

           http://aniyo.iteye.com/blog/1496442

使用Linux重定向解決nohup.out無寫權限問題

■場景

執行nohup指令的時候,經常會出現下面這種沒有寫入權限的錯誤。

nohup: ignoring input and appending output to `nohup.out'

nohup: failed to run command `/etc/nginx_check.sh': Permission denied

■linux重定向:

0、1和2分别表示标準輸入、标準輸出和标準錯誤資訊輸出,可以用來指定需要重定向的标準輸入或輸出。

在一般使用時,預設的是标準輸出,既1。當我們需要特殊用途時,可以使用其他标号。

例如,将某個程式的錯誤資訊輸出到log檔案中:./program 2>log。這樣标準輸出還是在螢幕上,但是錯誤資訊會輸出到log檔案中。

另外,也可以實作0,1,2之間的重定向。2>&1:将錯誤資訊重定向到标準輸出。

Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重定向到它的資訊都會消失得無影無蹤。

這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以将輸出重定向到/dev/null。

如果想要正常輸出和錯誤資訊都不顯示,則要把标準輸出和标準錯誤都重定向到/dev/null, 例如:

# ls 1>/dev/null 2>/dev/null

還有一種做法是将錯誤重定向到标準輸出,然後再重定向到 /dev/null,例如:

# ls >/dev/null 2>&1

注意:此處的順序不能更改,否則達不到想要的效果,此時先将标準輸出重定向到 /dev/null,然後将标準錯誤重定向到标準輸出,

由于标準輸出已經重定向到了/dev/null,是以标準錯誤也會重定向到/dev/null,于是一切靜悄悄。

■關于nohup

在使用nohup指令的時候,經常由于輸出nohup.out的路徑沒有寫入權限,而無法使用nohup。

這是可以使用Linux重定向的方法,将nohup.out重定向至一個有寫入權限的路徑,或者直接扔到/dev/null中。

nohup ./program >/dev/null 2>/dev/null &

或者

nohup ./program >/dev/null 2>&1 &

繼續閱讀