歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux使用nohup命令讓程序永遠停在後台

Linux使用nohup命令讓程序永遠停在後台

日期:2017/2/28 15:59:59   编辑:Linux教程
使用SSH遠程部署項目,部署好了之後關掉終端,然後打開網頁在操作時發現沒有服務,於是再一次登進終端,采用ps -ef|grep bea查看之後,發現沒有了剛才的後台進程,操作系統是RedHat 5.5,J2EE服務器是Weblogic。

於是網上查了很多資料最終我才用了下面的第一種方法,我個人比較喜歡第二種方法,因為它不用強制kill掉進程。

第一種方法:在startWeblogic.sh目錄下,直接執行nohup ./startWebLogic.sh&,命令就可以了。

[weblogic@localhost cmdsys]ps -ef|grep bea

退出的時候執行下面的命令就可以了

[weblogic@localhost cmdsys] kill -9 2312 2170 29379 29413

以下是原話:

“用用戶名和密碼登陸遠程計算機後,需要使用Unix的命令tail -f 文本文件名即可監視遠程文件的變動情況,例如要監視Weblogic某一域的日志輸出只需要輸入命令:tail -f nohup.out,前提是輸入命令的位置在該域的根目錄下並且啟動Weblogic時指定輸出日志信息到nohup.out文本文件中,也就是下面說的nohup啟動方式。

使用nohup啟動Weblogic服務器:nohup ./startWebLogic.sh&,不使用startWebLogic.sh直接啟動的原因是如果直接啟動Weblogic服務器,那麼關掉SSH之後也會導致 WebLogic服務器的關閉,而使用nohup啟動會把Weblogic啟動到後台並把其產生的日志發送到nohup.out文件,而在SSH中只需要用tail -f nohup.out就可以查看Weblogic輸出的日志信息了“

第二種方法:使用screen 指令

screen 這個指令可以很好的解決跑後台服務的問題。

在終端中敲入如下命令

[weblogic@localhost ~]screen

,這個時候,服務器端會啟一個新的終端並且按ctrl+a+d就把會保存這個會話,但這個終端,與之前的普通終端不一樣,它不隸屬於 sshd 進程組,這樣,當本地終端關閉後,服務器終端不會被 kill。但上面的那個有一個不好之處就是當會話多了很難分清楚,因此我們要用下面一種命令

[weblogic@localhost ~]screen -S sessionname

按ctrl+a+d保存這個會話

這樣就可以用下面的命令

[weblogic@localhost ~]screen -ls

sessionname.tty1.server (Detached)

當你想恢復一個會話的時候你可以采用下面的命令

[weblogic@localhost ~]screen -r sessionname

然後,退出鍵入exit就可以退出後台進程了。

附錄【注:該附錄為復制的,不屬於本人】:

使用nohup讓程序永遠後台運行

Unix/Linux下一般比如想讓某個程序在後台運行,很多都是使用 & 在程序結尾來讓程序自動運行。比如我們要運行mysql在後台:

/usr/local/mysql/bin/mysqld_safe --user=mysql &

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

nohup /root/test.php &

  提示:

  [~]$ appending output to nohup.out

  嗯,證明運行成功,同時把程序運行的輸出信息放到當前目錄的 nohup.out 文件中去。

  附:nohup命令參考

  nohup 命令

  用途:不掛斷地運行命令。

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

   描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用 nohup 命令運行後台中的程序。要運行後台中的 nohup 命令,添加 & ( 表示“and”的符號)到命令的尾部。

   無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。如果標准錯誤是一個終端,那麼把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。

  退出狀態:該命令返回下列出口值:

  126 可以查找但不能調用 Command 參數指定的命令。

  127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。

  否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。

nohup命令及其輸出文件

  nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup就是不掛起的意思( n ohang up)。

該命令的一般形式為:nohup command &

使用nohup命令提交作業

如果使用nohup命令提交作業,那麼在缺省情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:

nohup command > myout.file 2>&1 &

在上面的例子中,輸出被重定向到myout.file文件中。

使用 jobs 查看任務。

使用 fg %n 關閉。

另外有兩個常用的ftp工具ncftpget和ncftpput,可以實現後台的ftp上傳和下載,這樣我就可以利用這些命令在後台上傳和下載文件了。

Copyright © Linux教程網 All Rights Reserved