linux: nohup & 重定向

104 阅读2分钟

nohup & 重定向

背景

今天在进行一些spark-hive​的操作时, 因为对此完全不了解, 所以找好兄弟咨询了下, 他给了我一串我完全看不懂的shell命令, 本文就是专门用来解释这个命令的

问题

  1. nohup​以及 >

代码

这段神奇的代码: nohup spark-hive -f xx.sql > xx.log 2>&1 &

解释

  1. nohup​:

    • nohup​ 是一个命令,它可以让你运行的程序在退出终端后继续运行。当你退出登录、关闭终端或断开SSH连接时,操作系统会向所有运行的程序发送一个SIGHUP信号,通常会导致程序终止。nohup​命令会阻止这个信号,让后续运行的程序忽略它,确保程序的持续运行。
  2. spark-hive​:

    • 这是启动Hive会话的命令,可能是一个自定义的脚本或别名,用于执行Hive查询。这里的假设是spark-hive​是利用Spark引擎执行Hive查询的命令。
  3. -f xx.sql​:

    • -f​ 参数代表 "file",xx.sql​ 是一个包含Hive SQL查询语句的文件。这个参数告诉spark-hive​命令读取该文件并执行文件中定义的SQL语句。
  4. >​:

    • 这个符号是输出重定向操作符,用于将命令的标准输出(通常显示在终端上的输出)重定向到一个文件上。
    • xx.log​ 是输出文件的名称。这意味着命令 spark-hive -f xx.sql​ 的标准输出(正常的输出)不会显示在终端上,而是会被写入到 xx.log​ 这个文件中。
  5. 2>&1​:

    • 这是一个特殊的重定向形式,用于将标准错误(stderr,即错误消息)重定向到标准输出(stdout,正常输出)。
    • 2​ 代表标准错误,1​ 代表标准输出。所以 2>&1​ 的意思是将错误信息也输出到xx.log​文件中,与正常的输出合并。
  6. &​:

    • 这个符号用于将命令置于后台执行。它让这个命令在子shell中运行,这意味着即使你的终端关闭,这个命令仍然在后台运行。
    • 这允许你继续在同一终端中运行其他命令,而该命令会在后台无干扰地运行。

总结一下,nohup spark-hive -f xx.sql > xx.log 2>&1 &​ 这个命令的作用是:

  • 无论终端是否关闭,都在后台安静地启动一个spark-hive​进程来运行xx.sql​文件中的Hive SQL语句。
  • 将所有的正常输出和错误输出都保存到xx.log​文件中,以供后续审查。