다음 명령을 실행했습니다.
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은 쉘 구문의 일부가 아닙니다. 이는 단지 실행 파일일 뿐이므로 임의의 명령을 입력하고 접두사를 추가하여 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' 명령을 실행할 수 없습니다: 해당 파일이나 디렉터리가 없습니다
첫 번째 줄은 단지 경고일 뿐입니다. 두 번째 줄에서는 오류를 설명합니다. 독립 실행형 실행 파일이 아닌 실행 파일로 호출 nohup
해 보십시오 .$1
cd
여러 명령을 결합해야 할 때 nohup
일반적으로 다음 구문을 사용합니다.
nohup bash -c "long command" &
더 좋은 방법이 있을 수도 있지만 제가 사용하는 방법은 이렇습니다. 위의 예에서 cd
이전에 할 수 없었던 이유가 실제로 있다면 nohup
그렇게 할 것입니다.
nohup bash -c "cd myfolder && ./script.sh` &
마지막으로 염두에 두어야 할 점은 프로그램이 아무 목적도 없는 자체 신호 처리기를 설치할 수 있다는 것입니다 nohup
. 그림에서 알 수 있듯이이 문제.