Unix重定向:
最近我遇到了一个问题,其中一个脚本使用下面的命令在后台执行它。问题是脚本在启动时执行了两次。
例如:
在脚本中我将回显“Hello”打印到日志文件。当脚本执行时,我在日志文件中看到它同时打印了两次。任何人都可以告诉我这里两次执行脚本的原因。
nohup <runScript> </dev/null 1>&- 2>&- &
答案 0 :(得分:1)
您问题的原始版本有点令人困惑。主题行询问(推断命令和参数):
somecmd arg1 </dev/null 1>&- 2>&- &
问题的主体似乎在询问:
nohup &- 2>&- &
可以合理推断为:
nohup somecmd arg1 &- 2>&- &
您的问题的编辑版本也令人困惑 - 尽管更改只是缩进代码片段。当您询问I / O重定向时,符号<runscript>
被选中。我猜你写的<runscript>
等同于我写somecmd
,而不是重定向runscript
的标准输入和错误的输出重定向。但是,经过修订
代码至少与主题行匹配:
nohup runScript </dev/null 1>&- 2>&- &
所以,我会忽略&-
符号(此答案的先前版本没有)。
</dev/null 1>&- 2>&- &
第一个命令行从/dev/null
重定向标准输入,并关闭标准输出和标准错误并在后台执行命令。从/dev/null
重定向是好的;关闭标准输出和标准错误不是很好 - 程序有权打开这三个文件描述符,这可以通过重定向到/dev/null
来完成:
somecmd arg1 </dev/null >/dev/null 2>&1 &
或:
somecmd arg1 </dev/null >/dev/null 2>/dev/null &
这两者之间差别不大。
任何代码中都没有任何内容可以解释脚本运行两次,或者输出出现在日志文件中两次。由于您尚未显示已运行的脚本,因此我们无法从中推断出任何原因。总的来说,收费将是“操作员错误” - 您设法运行命令两次。如果您希望我们调查,您必须提供可重现的脚本:
如果没有这样一个可重复的脚本,没有任何人可以帮助你。