1、文兴一言
sh ./xxx.sh &
和 nohup sh ./xxx.sh &
这两个命令都用于在后台运行脚本,但它们之间存在一些关键的区别,特别是在脚本对终端会话(或称为“挂起”)的依赖性和日志管理方面。
1. sh ./xxx.sh &
- 作用:这个命令使用
sh
解释器来执行当前目录下的xxx.sh
脚本,并且通过在命令末尾添加&
符号,将这个进程放入后台执行。 - 依赖:这个命令启动的脚本依赖于当前的终端会话。如果终端会话被关闭(比如你注销或关闭了终端窗口),那么由这个会话启动的后台进程(包括这个脚本)可能会收到
SIGHUP
信号并被终止。这是因为很多 shell 默认会向它们启动的所有后台进程发送SIGHUP
信号,当终端会话结束时。 - 日志:默认情况下,脚本的输出(标准输出和标准错误)会发送到启动它的终端。但是,因为脚本被放入了后台,你可能无法立即看到这些输出,除非你手动地将其重定向到文件或其他地方。
2. nohup sh ./xxx.sh &
- 作用:这个命令同样使用
sh
解释器来执行xxx.sh
脚本,并通过nohup
命令和&
符号,将这个进程放入后台执行,同时忽略所有的SIGHUP
信号。 - 依赖:与直接使用
&
不同,nohup
命令使得即使终端会话被关闭,脚本也会继续运行。nohup
命令设计用于在用户注销或终端会话结束时,让程序继续运行。 - 日志:默认情况下,
nohup
会将脚本的标准输出和标准错误重定向到一个名为nohup.out
的文件中(除非你在命令中指定了其他文件)。这意味着你可以稍后在文件中查看脚本的输出,而无需担心它们会丢失或因为终端关闭而无法查看。
总结
- 如果你希望在终端关闭后脚本仍然继续运行,并且想要保存其输出到一个文件中,那么应该使用
nohup sh ./xxx.sh &
。 - 如果你不关心终端关闭后脚本是否继续运行,或者你想要自己处理脚本的输出(例如,通过重定向到特定文件),那么
sh ./xxx.sh &
可能就足够了。但请注意,这种情况下,如果终端关闭,脚本可能会因为收到SIGHUP
信号而被终止。
2、 案例-启动 rabbitmq_server
首先cd 到 rabbitmq 安装目录
cd /XXXXX/rabbitmq_server-3.6.9/sbin/
然后
nohup ./rabbitmq-server &> rabbitmq-server.log &
这样就避免了 关闭终端,而关闭进程的问题。