|

Linux nohup后台启动/ 后台启动命令中nohup 、&、重定向的使用

关键要点

  • nohup 似乎是确保命令在终端关闭后仍能运行的有效工具,研究表明它通过忽略 SIGHUP 信号实现此功能。
  • & 符号可能将命令放入后台运行,但如果终端关闭,命令可能会停止。
  • 重定向(如 >2>&1)看起来是管理命令输出的好方法,可以将输出保存到文件。

nohup 的使用

nohup 命令的全称是 “no hang up”,用于在后台运行命令,即使你关闭终端,命令也能继续执行。默认情况下,它会将输出写入 nohup.out 文件。

& 的作用

& 符号可以将命令放入后台运行,让你可以在终端继续执行其他任务。但要注意,如果只用 & 而不搭配 nohup,终端关闭后命令可能会停止。

重定向的使用

重定向允许你控制命令的输出位置。例如,> 可以将标准输出保存到文件,2>&1 可以将错误输出也合并到同一个文件。这在记录日志时非常有用。


详细报告

以下是关于 Linux 中 nohup& 和重定向用于后台启动命令的全面分析,内容基于可靠的中文技术资源,确保提供准确且实用的信息。

背景与概述

在 Linux 系统中,经常需要让某些命令或脚本在后台运行,尤其是在远程服务器上操作时。例如,运行一个长时间的任务(如数据处理或 Web 服务),希望即使 SSH 会话断开,任务也能继续执行。为此,nohup& 和重定向是常用的工具组合。以下是它们的详细解释和使用方法。

nohup 命令的详细说明

  • 定义nohup 是 “no hang up” 的缩写,意为不挂断。它通过忽略 SIGHUP 信号,确保命令在终端关闭后仍能继续运行。
  • 默认输出:如果不指定输出文件,nohup 会将命令的输出(标准输出和标准错误)写入当前目录下的 nohup.out 文件。如果当前目录的 nohup.out 文件不可写,输出会自动重定向到用户主目录 $HOME/nohup.out
  • 语法nohup Command [Arg ...] [ & ]
  • Command:要执行的命令,例如 sh test.sh
  • Arg:命令的参数,可选,例如指定输出文件。
  • &:可选,用于将命令放入后台运行。
  • 使用场景:特别适合远程执行脚本或长时间运行的任务,例如启动 JAR 包或 shell 脚本。
  • 示例
  • nohup sh test.sh:运行 test.sh 脚本,输出到 nohup.out,终端关闭后脚本继续运行。
  • nohup /root/runoob.sh &:将 runoob.sh 放入后台运行,输出到 nohup.out,适合需要继续使用终端的情况。

& 符号的详细说明

  • 定义& 是一个符号,用于将命令放入后台运行。这意味着命令不会阻塞终端,你可以继续输入其他命令。
  • 局限性:如果只使用 & 而不搭配 nohup,当终端关闭(例如 SSH 断开)时,命令会收到 SIGHUP 信号并可能终止。
  • 使用场景:适合短时间后台任务,或在终端保持打开的情况下运行。
  • 示例
  • sh test.sh &:将 test.sh 放入后台运行,但如果关闭终端,脚本可能会停止。
  • nohup 结合:nohup sh test.sh & 既放入后台运行,又确保终端关闭后仍能继续。

重定向的详细说明

重定向是 Linux 中管理输入输出流的重要机制,特别在后台运行时,用于将命令的输出保存到文件而不是显示在终端。

  • 常用符号
  • >:将标准输出(stdout,文件描述符 1)重定向到文件,覆盖原有内容。
  • >>:将标准输出追加到文件。
  • 2>:将标准错误(stderr,文件描述符 2)重定向到文件。
  • 2>>:将标准错误追加到文件。
  • 2>&1:将标准错误重定向到标准输出,即两者合并到一个输出流。
  • 文件描述符
  • 0:标准输入(stdin)。
  • 1:标准输出(stdout)。
  • 2:标准错误(stderr)。
  • 使用场景:在后台运行时,通常希望将输出日志保存到文件,便于后续查看或分析。
  • 示例
  • nohup sh test.sh > output.log 2>&1 &
    • nohup:确保脚本在终端关闭后仍运行。
    • >:将标准输出写入 output.log
    • 2>&1:将标准错误也合并到 output.log
    • &:将整个命令放入后台。
  • nohup /root/runoob.sh > runoob.log 2>&1 &:将输出和错误都保存到 runoob.log,适合需要详细日志记录的情况。

最佳实践与技巧

以下是一些实用的技巧,帮助更好地使用这些工具:

  • 不记录日志:如果不需要输出日志,可以将输出重定向到 /dev/null
  • nohup ./test.sh > /dev/null &:运行脚本但不保存任何输出。
  • 清空 nohup.out:如果 nohup.out 文件过大,可以清空而不停止服务:
  • cat /dev/null > nohup.out
  • cp /dev/null nohup.out
  • 查看后台进程:使用 ps 命令查看当前运行的进程:
  • ps -aux | grep "test.sh"
    • -a:显示所有进程。
    • -u:以用户格式显示。
    • -x:显示所有终端的进程。
  • 终止进程:找到进程的 PID 后,使用 kill 命令终止:
  • 步骤:
    1. ps -aux | grep "test.sh" 找到 PID。
    2. kill -9 PID 强制终止进程。

对比与总结

以下表格总结了 nohup& 和重定向的主要特点,帮助理解它们的区别和组合使用:

工具主要功能是否受终端关闭影响默认输出位置
nohup忽略 SIGHUP,确保命令继续运行nohup.out$HOME/nohup.out
&将命令放入后台运行是(会终止)终端或指定文件
重定向(>2>&1控制输出位置,将输出保存到文件否(需搭配 nohup指定文件

推荐的完整命令为:nohup ./test.sh > output.log 2>&1 &,它结合了后台运行、持续执行和日志记录的功能,适合大多数场景。

参考来源

以上内容基于 2025 年 7 月 17 日的最新信息,确保准确性和实用性。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注