我运行了以下命令
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 &
但不幸的是,我在第二次按 Enter 后得到了这个
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
我错过了什么?
先感谢您,
答案1
$ type -a nohup
nohup is /usr/bin/nohup
Nohup 不是 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的重定向,man page已经说得很清楚了。
如果标准输入是终端,则从 /dev/null 重定向它。如果标准输出是终端,则尽可能将输出附加到“nohup.out”,否则附加到“$HOME/nohup.out”。如果标准错误是终端,则将其重定向到标准输出。要将输出保存到文件,请使用“nohup COMMAND > 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
。如图所示这个问题。