红联Linux门户
Linux帮助

Linux使用nohup命令让程序永远停在后台

发布时间:2014-11-30 15:36:52来源:linux网站作者:linuxoostudy

使用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上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。