使用nohup命令后继续执行下一条命令

简单说下背景:

有很多个java应用,需要以nohup java -jar  xxx.jar 的方式启动。但是使用 nohup  java  -jar   xxx.jar   2>&1 & 执行后,总是需要摁下回车才会退出。如此一来,就无法实现循环执行。那怎么解决这个问题呢? 

(nohup cmd 2>&1 &) && sleep 1 采用这种方式可以成功

&

贴下命令

for i in {1..10};do  (nohup  java  jar  xxx.jar   > $i.log 2>&1 &)  &&  sleep 1 ;done

 

最简单的后台运行是:&.
放在一个命令末尾,可以将这个命令放到后台执行。放到后台后主进程将继续向下执行,后台命令将与主进程并行执行。

&&

放在一个命令末尾,与什么都没有单纯换行实际效果相同,等待这个命令执行完后才继续执行下面的命令。

nohup:

nohup 是 no hungup的缩写,意为“不挂断”,我们在使用Xshell等工具执行Linux脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用nohup指令来运行指令,使程序可以忽略挂起信号继续运行。

nohup和&的区别

  • &:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束
  • nohup:不挂断的运行,注意并没有后台运行的功能,就是指用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行
  • 注意:nohup没有后台运行的意思;&才是后台运行。因此将nohup和&结合使用,就可以实现使命令永久地在后台执行的功能。

查看后台运行的进程

ps -aux | grep "****.sh" 或 ps -def | grep "runoob.sh"

停止后台进程

上面看到对应的 PID 后,可以通过 kill -PID (如 kill -9) 来杀死进程。

2>&1 输出重定向:

nohup /root/runoob.sh > runoob.log 2>&1 &
(nohup cmd 2>&1 &) && sleep 1 采用这种方式可以成功
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。
0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

 

 

 

 

posted @ 2024-12-13 10:51  羊脂玉净瓶  阅读(98)  评论(0)    收藏  举报