nohup、screen命令的基本使用
一、nohup+&
1、使用nohup
nohup command [ arg … ]
command是命令的意思,arg既为command命令的参数,理解为nohup加强了command的意思
nohup 是no hang up的缩写,意思是不挂起运行。例如现在终端(XShell等)需要执行一个shell脚本,并且希望当终端出现被迫中断,或者人为中断时,sh脚本任然不会被中断,继续执行,此时可以使用nohup命令了。
nohup sh test.sh
不挂起执行test.sh脚本,关闭当前终端,test.sh如果还没执行完成,则仍然在运行
通过nohup执行的命令,此时终端将不再接受标准输入,既不可以在当前的回话中输入其他命令了。原因是nohup只是起到不挂起运行,并不用有后台执行的功能。同时,nohup 命令的输出会重定向到当前目录的nohup.out 文件中,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。
再比如启动一个jar包
nohup java -jar test.jar
此时,在test.jar目录下会创建一个nohup.out文件,test.jar里面的日志输出,标准输出都会重定向一份到nohup.out中。
使用nohup命名启动
nohup java -jar test-0.0.1-SNAPSHOT.jar
此时可以看到,终端的已经不再接收输入命令,或者说执行输入命令无效。此时如果直接关闭终端,如果jar包还没执行完任务,改进程不会退出,但是注意,如果通过Ctrl+C的方式,则会中断进程。
2、&命令
语法command [ arg ... ] 将任务放到后台运行
java -jar test-0.0.1-SNAPSHOT.jar >nohup.out & 在后台运行jar包
但是注意,当jar进程还没运行完成,此时关闭终端回话,则该进程会被中断。
3、nohup+&
nohup java -jar test-0.0.1-SNAPSHOT.jar >nohup.out &
此时执行Ctrl+C不会关掉进程,而且关闭终端不会中断,这是linux后台启动jar的正确方式之一。
二、screen命令的简单使用
使用screen命令可以开启多个窗口,或者说是屏幕,一个screen窗口简单理解就是类似于一个真实的终端连接。对于一个长时间执行的任务,我们可以使用screen命令打开一个窗口,在这个窗口中执行这个长时间命令(进程),中途可以切换到其他的窗口,或者关闭真实的终端连接会话。再次进入可以通过screen命令在screen管理的窗口列表中,找到之前的screen,并重新进入。
打个比喻,现在我使用xshell连接到linux,建立了一个连接会话,现在我执行一个命令,tail -20f text.log,监控这个文件的写入信息,此时我又想在这个会话中干点其他的事情,又不想用xshell重新打开另一个会话连接,那怎么办?此时就可以使用screen命令。screen是一个可以在多进程之间多路复用一个物理终端窗口管理器,既一个终端会话,可以笔者的理解就是,在screen中“虚拟”的xshell会话连接,既screen管理了这些会话连接。
如果系统没有screen命令,先安装
yum install screen
使用screen,不带任何的参数,则开启了一个窗口,名称由screen管理,带上-S参数可以自定义窗口名称
screen -S test-screen-01
在当前窗口中,按住ctrl,然后依次按下 a 和 d,回到主会话。此时键入screen -ls,查看screen管理的会话列表
screen -ls
使用screen -r 会话名/会话ID恢复到该会话
screen -r 5164
如果此时无法进入,说明有另外的终端连接占用了,特别是我们自己操作时,当Ctrl a,d执行之后,没有退出当前xshell连接的会话,此时screen -r 将不能直接连上,使用screen -D -r 意思是先踢掉前一用户,再登陆。
screen -D -r 5164
删除一个窗口,可以在当前窗口输入exit,或者通过screen -d 会话ID删除
screen -d 5129
如果此方法不行,则通过如下命令
screen -X -S [session # you want to kill] quit
screen -X -S 5129 quit
使用screen发布jar程序
使用screen -S 打开一个窗口
执行 java -jar test-0.0.1-SNAPSHOT.jar
按住Ctrl,依次按下a,d键回到主的screen
screen -ls查看当前管理的窗口
screen -r 恢复窗口
当前窗口exit退出,或者screen -d 删除窗口