rodei o seguinte comando
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 &
mas infelizmente, consegui isso depois de pressionar a segunda vez 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
O que eu perdi?
Agradeço antecipadamente,
Nohup não faz parte da sintaxe do shell. É apenas um executável, o que significa que você não pode simplesmente digitar um comando arbitrário e prefixá-lo
nohup
para esperar que ele seja executado com SIGHUP ignorado. No caso denohup
é executado com os argumentosconda
,activate
eshuffle_pair_end_reads
. Tudo depois do primeiro&&
é outro comando simples.nohup
não sabe nada sobre isso e não pode controlar o comportamento dele.Como está escrito, significa executar
conda activate shuffle_pair_end_reads
comSIGHUP
ignorado e, senohup
for bem-sucedido, processe para o script python.Quanto ao redirecionamento de stdin e stdout, a página man declarou claramente sobre isso.
No seu caso, a entrada do seu comando não é redirecionada, então
nohup
redireciona para você de/dev/null
. Da mesma forma,nohup
redireciona a saída padrãonohup.out
para você, emitindo um aviso (observe que isso é apenas um aviso) "ignorando a entrada e anexando a saída a 'nohup.out'" e gravando o aviso em stderr.Quanto ao status de saída de
nohup
, esta pergunta explica bem. Você precisa verificar por si mesmo por que o comandonohup conda activate shuffle_end_reads
está emitindo um status de saída de1
.Usar
nohup
como se fosse parte dabash
sintaxe pode levar a erros engraçados. Um dos mais simples,falhará com a seguinte mensagem escrita em stderr:
A primeira linha é apenas um aviso. A segunda linha explica o erro.
nohup
apenas tenta invocá-lo$1
como um executável ecd
nunca é um executável autônomo.Quando preciso combinar vários comandos para
nohup
, costumo usar a sintaxePode haver maneiras melhores, mas é o que eu uso. No exemplo acima, se houver realmente uma razão pela qual você não pode
cd
antesnohup
, fareiUma última coisa a ter em mente é que seu programa pode instalar seus próprios manipuladores de sinal que o tornam
nohup
inútil. Como mostrado nesta pergunta .