我运行了以下命令
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
我错过了什么?
先感谢您,
Nohup 不是 shell 语法的一部分。它只是一个可执行文件,这意味着您不能只键入任意命令并为其添加前缀
nohup
以期望它在忽略 SIGHUP 的情况下执行。如果是nohup
使用参数conda
,activate
和执行shuffle_pair_end_reads
。第一个之后的所有&&
内容都是另一个简单的命令。nohup
对它一无所知,也无法控制它的行为。正如它所写的那样,这意味着执行
conda activate shuffle_pair_end_reads
忽略SIGHUP
,然后如果nohup
成功,则处理到python脚本。至于 stdin 和 stdout 的重定向,man page 已经说得很清楚了。
在你的情况下,你的命令的输入没有被重定向,所以
nohup
从/dev/null
. 同样,为您nohup
重定向标准输出nohup.out
,发出警告(注意这只是一个警告)“忽略输入并将输出附加到'nohup.out'”并将警告写入stderr。至于退出状态
nohup
,这个问题很好解释。您需要自己检查为什么该命令nohup conda activate shuffle_end_reads
发出退出状态1
。nohup
就好像它是语法的一部分一样使用bash
可能会导致有趣的错误。最简单的一种,将失败,并将以下消息写入 stderr:
第一行只是一个警告。第二行解释了错误。
nohup
只是尝试将其$1
作为可执行文件调用,而cd
绝不是独立的可执行文件。当我需要组合多个命令时
nohup
,我通常使用语法可能有更好的方法,但这就是我使用的方法。在上面的例子中,如果真的有你
cd
之前做不到的原因nohup
,我会做最后要记住的一件事是,您的程序可能会安装自己的信号处理程序,而这会变得
nohup
无用。如this question所示。