我运行了以下命令
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: 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我错过了什么?
提前谢谢你,
发布于 2019-03-15 16:55:39
$ type -a nohup
nohup is /usr/bin/nohupNohup不是shell语法的一部分。它只是一个可执行文件,这意味着您不能只键入任意命令并在其前缀加上nohup以期望它在忽略SIGHUP的情况下执行。在以下情况下
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使用参数conda、activate和shuffle_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语法的一部分一样,可能会导致有趣的错误。最简单的一个,
nohup cd myfolder && ./script.sh &写入stderr的下列消息将失败:
nohup:忽略输入并将输出附加到'nohup.out‘nohup:未能运行命令'cd':没有这样的文件或目录
第一行只是一个警告。第二行解释错误。nohup只是尝试将其$1作为可执行文件调用,而cd从来不是一个独立的可执行文件。
当我需要为nohup组合多个命令时,我通常使用以下语法
nohup bash -c "long command" &也许有更好的方法,但这就是我所用的。在上面的示例中,如果确实有一个原因不能在cd之前使用nohup,我将这样做。
nohup bash -c "cd myfolder && ./script.sh` &最后要记住的一点是,您的程序可能会安装自己的信号处理程序,从而使nohup变得无用。如这个问题所示。
https://unix.stackexchange.com/questions/506537
复制相似问题