[Linux] nohup 명령어 2>&1 의미
nohup 명령어는 터미널이 끊긴 이후에도 프로세스를 종료하지 않기 위해 사용한다.
|
nohup test.sh 2>&1 & |
예를 들어 스프링부트로 작성한 war 파일(또는 jar 파일)을 실행하는 nohup 명령어는 다음과 같다.
|
nohup java -jar test.war 2>&1 & |
우선 2>&1 의 의미는 표준오류(stderr)를 표준출력(stdout)이 전달되는 곳으로 보내라는 뜻이다.
숫자 0은 표준입력(stdin), 숫자 1은 표준출력(stdout), 숫자 2는 표준오류(stderr)를 의미한다.
nohup은 기본적으로 nohup.out 파일에 표준출력(stdout)을 쓰기 때문에, 2>&1 명령어를 사용하면 표준오류(stderr)도 nohup.out에 같이 쓴다.
마지막 &의 의미는 명령을 백그라운드 작업으로 실행한다는 뜻이다.
만약 표준출력이든 표준오류든 아무 것도 쓰고 싶지 않다면 명령어는 다음과 같다.
|
nohup java -jar test.war >/dev/null 2>&1 & |
첫번째로 >/dev/null 의 의미는 표준출력을 기록하지 않는다는 뜻이다. 원래는 표준출력을 /dev/null 로 리다이렉션하라는 뜻인데, /dev/null 이 출력을 기록하지 않는 더미 장치이므로 이쪽으로 전달하면 아무 것도 쓰지 않는다.
두번째로 2>&1 의 의미는 표준오류를 표준출력이 전달되는 곳으로 보내라는 뜻인데, 이미 표준출력을 /dev/null 로 리다이렉션했으므로 표준출력과 마찬가지로 표준오류를 기록하지 않는다.
마지막 &의 의미는 명령을 백그라운드 작업으로 실행한다는 뜻이다.
표준출력과 표준오류를 각각 다른 파일에 쓰고 싶다면 명령어는 다음과 같다.
|
nohup java -jar test.war 1>stdout.txt 2>stderr.txt & |
첫번째로 1>stdout.txt 의 의미는 표준출력을 stdout.txt 파일에 기록한다는 뜻이다.
두번째로 2>stderr.txt 의 의미는 표준오류를 stderr.txt 파일에 기록한다는 뜻이다.
마지막 &의 의미는 명령을 백그라운드 작업으로 실행한다는 뜻이다.