nohup:入力を無視し、「nohup.out」に出力を追加します。

nohup:入力を無視し、「nohup.out」に出力を追加します。

次のコマンドを実行しました。

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を2回押すと、このメッセージが表示されます。

 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はシェル構文の一部ではありません。これは単に実行可能ファイルであるため、任意のコマンドを入力してプレフィックスを追加してnohupSIGHUPに関係なく実行されることを期待することはできません。の場合

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 &

nohupcondaパラメータとactivate実行を使用しますshuffle_pair_end_reads。最初のコマンドの後のすべては&&別の単純なコマンドです。nohupそれについて知られていることはなく、その行動を制御することもできません。

書かれているように、これは実行を無視し、conda activate shuffle_pair_end_reads成功するSIGHUPnohupPythonスクリプトを処理することを意味します。

stdinとstdoutのリダイレクトについては、マニュアルページで非常に明確に説明しました。

標準入力が端末の場合は/ dev / nullからリダイレクトします。標準出力が端末の場合は、可能であれば「nohup.out」に出力を追加し、それ以外の場合は「$ HOME / nohup.out」に出力を追加します。標準エラーが端末の場合は標準出力にリダイレクトします。出力をファイルに保存するには、「nohup COMMAND> FILE」を使用します。

あなたの場合、コマンドへの入力はリダイレクトされないため、からnohupリダイレクトされます/dev/null。同様に、 nohupstdout を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' コマンドを実行できません: そのファイルまたはディレクトリがありません

最初の行は単なる警告です。 2行目ではエラーについて説明します。スタンドアロンの実行可能ファイルではなく実行可能ファイルとして呼び出してnohupみてください。$1cd

複数のコマンドを組み合わせる必要がある場合は、通常、nohup次の構文を使用します。

nohup bash -c "long command" &

もっと良い方法があるかもしれませんが、私が使う方法はこんな感じです。上記の例でcd以前にできなかった理由が実際にある場合は、nohupそうします。

nohup bash -c "cd myfolder && ./script.sh` &

最後に心に留めておくべきことは、プログラムが目的のない独自のシグナルハンドラをインストールできることですnohup。図からわかるようにこの問題

関連情報