跳到主要内容

如何在后台运行Shell脚本 ?

参考答案:

在后台运行Shell脚本有几种方法,以下是其中的几种:

  1. 使用&符号: 在命令的末尾添加&符号,可以将命令放到后台执行。
./your_script.sh &

这样,即使你关闭了终端,脚本也会继续运行。但是,请注意,如果你关闭了终端会话,并且脚本需要与该会话进行交互(例如,读取输入或输出到终端),那么脚本可能会遇到问题。 2. 使用nohup命令nohup命令用于在后台运行命令,即使你关闭了终端。它还会将命令的输出重定向到一个文件(除非另外指定)。

nohup ./your_script.sh &

默认情况下,nohup会将输出重定向到名为nohup.out的文件。如果你想将输出重定向到另一个文件,可以使用重定向操作符>

nohup ./your_script.sh > output.log &
  1. 使用screentmux: 这些工具允许你创建多个终端会话,即使你关闭了原始的终端窗口,这些会话也会继续运行。你可以在screentmux会话中启动你的脚本,然后安全地断开连接。稍后,你可以重新连接到这些会话,查看脚本的进度或与其交互。

使用screen的示例:

screen -S mysession
./your_script.sh
# 按 Ctrl+A 然后按 D 来断开screen会话

之后,你可以使用screen -r mysession重新连接到该会话。

使用tmux的示例与screen类似,但命令和快捷键可能有所不同。 4. 使用disown命令: 如果你已经在前台启动了一个命令,但想将其放到后台,你可以使用Ctrl+Z暂停该命令,然后使用bg命令将其放到后台。接着,使用disown命令从作业列表中移除该作业,这样即使你关闭了终端,它也会继续运行。

^Z  # 按 Ctrl+Z 暂停命令
bg  # 将命令放到后台
disown  # 从作业列表中移除该作业

选择哪种方法取决于你的具体需求和环境。如果你只是想简单地在后台运行一个脚本并不关心其输出,那么使用&nohup可能就足够了。但如果你需要能够在稍后重新连接到该会话或与其交互,那么screentmux可能更合适。