nohup & 重定向
背景
今天在进行一些spark-hive的操作时, 因为对此完全不了解, 所以找好兄弟咨询了下, 他给了我一串我完全看不懂的shell命令, 本文就是专门用来解释这个命令的
问题
-
nohup以及>
代码
这段神奇的代码: nohup spark-hive -f xx.sql > xx.log 2>&1 &
解释
-
nohup:-
nohup 是一个命令,它可以让你运行的程序在退出终端后继续运行。当你退出登录、关闭终端或断开SSH连接时,操作系统会向所有运行的程序发送一个SIGHUP信号,通常会导致程序终止。nohup命令会阻止这个信号,让后续运行的程序忽略它,确保程序的持续运行。
-
-
spark-hive:- 这是启动Hive会话的命令,可能是一个自定义的脚本或别名,用于执行Hive查询。这里的假设是
spark-hive是利用Spark引擎执行Hive查询的命令。
- 这是启动Hive会话的命令,可能是一个自定义的脚本或别名,用于执行Hive查询。这里的假设是
-
-f xx.sql:-
-f 参数代表 "file",xx.sql 是一个包含Hive SQL查询语句的文件。这个参数告诉spark-hive命令读取该文件并执行文件中定义的SQL语句。
-
-
>:- 这个符号是输出重定向操作符,用于将命令的标准输出(通常显示在终端上的输出)重定向到一个文件上。
-
xx.log 是输出文件的名称。这意味着命令spark-hive -f xx.sql 的标准输出(正常的输出)不会显示在终端上,而是会被写入到xx.log 这个文件中。
-
2>&1:- 这是一个特殊的重定向形式,用于将标准错误(stderr,即错误消息)重定向到标准输出(stdout,正常输出)。
-
2 代表标准错误,1 代表标准输出。所以2>&1 的意思是将错误信息也输出到xx.log文件中,与正常的输出合并。
-
&:- 这个符号用于将命令置于后台执行。它让这个命令在子shell中运行,这意味着即使你的终端关闭,这个命令仍然在后台运行。
- 这允许你继续在同一终端中运行其他命令,而该命令会在后台无干扰地运行。
总结一下,nohup spark-hive -f xx.sql > xx.log 2>&1 & 这个命令的作用是:
- 无论终端是否关闭,都在后台安静地启动一个
spark-hive进程来运行xx.sql文件中的Hive SQL语句。 - 将所有的正常输出和错误输出都保存到
xx.log文件中,以供后续审查。