首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nohup:忽略输入并将输出附加到“nohup.out”

nohup:忽略输入并将输出附加到“nohup.out”
EN

Unix & Linux用户
提问于 2019-03-15 15:25:46
回答 1查看 18.2K关注 0票数 0

我运行了以下命令

代码语言:javascript
运行
复制
nohup conda activate shuffle_pair_end_reads && python3 shuffle_pair_end_reads.py \
    fastp-filtered-merged4racon/merge_R1.fq.gz \
    fastp-filtered-merged4racon/merge_R2.fq.gz \
    >fastp-filtered-merged4racon/merged_R1_R2.fa \
    2>merged_R1_R2.log &

但不幸的是,在我第二次按下回车后,我得到了这个

代码语言:javascript
运行
复制
 nohup: ignoring input and appending output to 'nohup.out'

[1]+  Exit 1                  nohup conda activate shuffle_pair_end_reads && python3 shuffle_pair_end_reads.py fastp-filtered-merged4racon/merge_R1.fq.gz fastp-filtered-merged4racon/merge_R2.fq.gz > fastp-filtered-merged4racon/merged_R1_R2.fa 2> merged_R1_R2.log

我错过了什么?

提前谢谢你,

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-03-15 16:55:39

代码语言:javascript
运行
复制
$ type -a nohup
nohup is /usr/bin/nohup

Nohup不是shell语法的一部分。它只是一个可执行文件,这意味着您不能只键入任意命令并在其前缀加上nohup以期望它在忽略SIGHUP的情况下执行。在以下情况下

代码语言:javascript
运行
复制
nohup conda activate shuffle_pair_end_reads && python3 shuffle_pair_end_reads.py \
    fastp-filtered-merged4racon/merge_R1.fq.gz \
    fastp-filtered-merged4racon/merge_R2.fq.gz \
    >fastp-filtered-merged4racon/merged_R1_R2.fa \
    2>merged_R1_R2.log &

nohup使用参数condaactivateshuffle_pair_end_reads执行。第一个&&之后的所有内容都是另一个简单的命令。nohup对此一无所知,无法控制它的行为。

在编写时,它意味着在忽略了conda activate shuffle_pair_end_reads的情况下执行SIGHUP,如果nohup成功,则处理到python脚本。

至于stdin和stdout的重定向,手册页已经清楚地说明了这一点。

如果标准输入是终端,请将其从/dev/null重定向。如果标准输出是终端,如果可能的话,将输出附加到'nohup.out‘,'$HOME/nohup.out’否则。如果标准错误是终端,请将其重定向到标准输出。若要将输出保存到文件中,请使用“nohup命令> FILE”。

在您的示例中,命令的输入没有被重定向,因此nohup/dev/null为您重定向。类似地,nohup为您重定向标准输出到nohup.out,发出警告(注意这只是一个警告)“忽略输入并将输出附加到'nohup.out'”,并将警告写入stderr。

对于nohup的退出状态,这个问题给出了很好的解释。您需要自己检查为什么命令nohup conda activate shuffle_end_reads发出1的退出状态。

使用nohup就好像它是bash语法的一部分一样,可能会导致有趣的错误。最简单的一个,

代码语言:javascript
运行
复制
nohup cd myfolder && ./script.sh &

写入stderr的下列消息将失败:

nohup:忽略输入并将输出附加到'nohup.out‘nohup:未能运行命令'cd':没有这样的文件或目录

第一行只是一个警告。第二行解释错误。nohup只是尝试将其$1作为可执行文件调用,而cd从来不是一个独立的可执行文件。

当我需要为nohup组合多个命令时,我通常使用以下语法

代码语言:javascript
运行
复制
nohup bash -c "long command" &

也许有更好的方法,但这就是我所用的。在上面的示例中,如果确实有一个原因不能在cd之前使用nohup,我将这样做。

代码语言:javascript
运行
复制
nohup bash -c "cd myfolder && ./script.sh` &

最后要记住的一点是,您的程序可能会安装自己的信号处理程序,从而使nohup变得无用。如这个问题所示。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/506537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档