该命令的一般形式为:nohup command &
nohup :表示永久运行
& : 表示后台运行
我们在开发中常需要启动长时间运行的程序,需要在关闭ssh连接时,仍然保持程序正常运行,为此我们需要用到nohup命令,当然也可以用screen。比如自己开发好的web项目打包成jar包放到服务器上需要开机自启动的场景。
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
2>&1,表示2的输出重定向等同于1
即标准输出到mqnamesrv.out中,接着,标准错误输出重定向等同于标准输出,输出到同一文件中。
nohup命令只保证单个指定进程不退出,screen命令会保留整个会话期内的所有进程;
nohup命令相对简单,对于复杂的人机交互还是需要screen命令;
nohup命令执行的程序只能通过kill命令来杀死,而screen命令可以更友好些;
screen命令可以保留会话的环境设置,通过恢复会话,可以实现工作环境的快速切换;
相对而言nohup占用资源更少,没有交互需求的时候,nohup就能满足需要了;
screen是可以完全替代nohup的,会更方便且强大些。
2.1 准备测试jar包
2.2 编写start.sh 启动脚本,以nohup的启动方式运行java -jar 命令,并输出启动日志文件 nothup.out 至当前目录下
#!/bin/sh
nohup java -jar test.jar -Xms64m -Xmx128m -XX:PermSize=64m -XX:MaxPermSize=128m > nothup.out 2>&1 &
2.3 运行jar文件需要java的环境
下载jdk,可以下载tar.gz的jdk包,放入/opt目录下并解压即可
2.4 jdk解压成功后需要配置JAVA_HOME的环境变量
在/etc/profile文件中最后添加以下两行
export JAVA_HOME="/opt/jdk1.8.0_191/bin"
export PATH="$JAVA_HOME:$PATH"
2.5 使配置生效
编辑好文件后需要wq保存退出后执行 source /etc/profile 刷新文件
2.6 linux开机自启动的执行文件为 /etc/rc.d/rc.local ,可以编辑该文件以执行自己所需要系统自启动时执行的一些东西,如下
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
#开机自启动nohup有个问题,有的会报command 'java' 找不到,需要以下更新下/etc/profile
source /etc/profile
#假设test.jar 在/home/test/目录下,启动脚本也在此目录下
cd /home/test/
sh start.sh
2.6.1 插曲介绍下sh start.sh 和 ./start.sh 的区别
sh xxx.sh是用sh 执行start.sh,start.sh可以没有执行标志,可以不用加./,可以不用在脚本第一行写上#!/bin/sh
./start.sh是调用脚本第一行制定的shell去解释执行,缺省为sh,就是bash
2.7 可以执行 reboot 重启linux验证 nothup.out 是否成功有启动日志。