[轉]-nohup-真正的Shell后台運行


&方式:
Unix/Linux下一般想讓某個程序在后台運行,很多都是使用 & 在程序結尾來讓程序自動運行。
比如我們要運行mysql在后台: /usr/local/mysql/bin/mysqld_safe --user=mysql &

nohup方式:
但是我們很多程序並不象mysqld一樣可以做成守護進程,可能我們的程序只是普通程序而已,一般這種程序即使使用 & 結尾,如果終端關閉,那么程序也會被關閉。
為了能夠后台運行,我們需要使用nohup這個命令,比如我們有個start.sh需要在后台運行,並且希望在后台能夠一直運行,那么就使用nohup:

nohup /root/start.sh & 在shell中回車后提示: [~]$ appending output to nohup.out 原程序的標准輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用。

nohup問題:
但是有時候在這一步會有問題,當把終端關閉后,進程會自動被關閉,察看nohup.out可以看到在關閉終端瞬間服務自動關閉。
有個操作終端時的細節:當shell中提示了nohup成功后還需要按終端上鍵盤任意鍵退回到shell輸入命令窗口,然后通過在shell中輸入exit來退出終端;

而我是每次在nohup執行成功后直接點關閉程序按鈕關閉終端。

所以這時候會斷掉該命令所對應的session,導致nohup對應的進程被通知需要一起shutdown。這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。

附: nohup命令參考
nohup 命令
用途:不掛斷地運行命令。
語法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略所有掛斷(SIGHUP)信號。
在注銷后使用 nohup 命令運行后台中的程序。要運行后台中的 nohup 命令,添加 & ( 表示"and"的符號)到命令的尾部。

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
如果沒有文件能創建或打開以用於追加,那么 Command 參數指定的命令不可調用。

如果標准錯誤是一個終端,那么把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM