平时我们用CRT,或者Xshell 连接到Linux服务器上执行一些命令操作,执行完成后,关闭窗口完事。但有些场景下,例如,启动一个java程序,而这个程序会每隔1分钟执行一些任务。如果我们用类似命令:
[root@test ~]# java -jar ./test.jar
但这样做有个问题,如果我们关闭终端,这个java进程也会随着退出。
linux下有个命令nohup
可以让程序后台运行,即使是我们退出了终端,它也会持续运行。
nohup [需要执行的命令] > log.file 2>&1 &
- 如果不写
> log.file 2>&1
nohup默认会把日志输出到当前目录下的nohup.out文件中,如果当前目录下的nohup.out文件禁止写入,则会输出重定向到 $HOME/nohup.out中。 - 如果不用nohup命令,只是以
&
结尾,当shell窗口终端关闭,那么程序也会被关闭。 - 只有当虚拟终端是
$ 或者 #
时候,才可以点击按钮关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #).
当我们退出终端后,再次用Xshell后者CRT登陆服务器,这时候可以用jobs命令来查询后台运行的程序。
jobs -l #显示任务列表
[root@test ~]# jobs -l
[1]- 22330 Running
[2]+ 22412 Done
[1],[2]
是任务编号+
号代表当前job-
号代表前一个job。- 第三列是进程号。