次のコマンドを実行しました。
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はシェル構文の一部ではありません。これは単に実行可能ファイルであるため、任意のコマンドを入力してプレフィックスを追加して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 COMMAND> FILE」を使用します。
あなたの場合、コマンドへの入力はリダイレクトされないため、からnohup
リダイレクトされます/dev/null
。同様に、 nohup
stdout を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
みてください。$1
cd
複数のコマンドを組み合わせる必要がある場合は、通常、nohup
次の構文を使用します。
nohup bash -c "long command" &
もっと良い方法があるかもしれませんが、私が使う方法はこんな感じです。上記の例でcd
以前にできなかった理由が実際にある場合は、nohup
そうします。
nohup bash -c "cd myfolder && ./script.sh` &
最後に心に留めておくべきことは、プログラムが目的のない独自のシグナルハンドラをインストールできることですnohup
。図からわかるようにこの問題。