一、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 &