출력을 로그 파일로 리디렉션하고 동시에 프로세스를 백그라운드로 지정할 수 있습니까?


116

출력을 로그 파일로 리디렉션하고 동시에 프로세스를 백그라운드로 지정할 수 있습니까?

다시 말해, 이와 같이 할 수 있습니까?

nohup java -jar myProgram.jar 2>&1 > output.log &

아니면 법적인 명령이 아닙니까? 또는 다음과 같이 수동으로 배경으로 이동해야합니까?

java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1

2
사용해 보셨습니까? 어떤 오류가 발생합니까? 또한 오타가 있거나 코드에 오류가 있는지 확실하지 않습니다. 2>$1아마 있어야합니다 2>&1.
Patrick

답변:


171

첫 번째 명령의 한 가지 문제는 stderout을 stdout이있는 위치로 리디렉션하고 (댓글에서 제안한대로 $를 &로 변경 한 경우) stdout을 일부 로그 파일로 리디렉션했지만 리디렉션 된 stderr를 따라 가지 않는 것입니다 . 다른 순서로 수행해야합니다. 먼저 원하는 위치로 stdout을 보낸 다음 stdout이있는 주소로 stderr를 보내십시오.

some_cmd > some_file 2>&1 &

그런 다음 &를 던져 배경으로 보낼 수 있습니다. jobs명령을 사용하여 작업에 액세스 할 수 있습니다 . jobs실행중인 작업을 보여주고 번호를 매 깁니다. 그런 다음 % 뒤에 숫자 등을 사용하여 작업에 대해 이야기 할 수 kill %1있습니다.

또한 &가 없으면으로 명령을 일시 중단하고 명령을 Ctrlz사용 bg하여 배경에 넣고 fg전경으로 다시 가져올 수 있습니다. jobs이 명령 과 함께 이것은 강력합니다.

명령을 작성하는 순서에 대해 위의 부분을 명확히하기 위해. stderr이 주소 1002이고 stdout이 주소 1001이고 파일이 1008이라고 가정합니다.이 명령은 왼쪽에서 오른쪽으로 읽으므로 가장 먼저 표시되는 것은 2>&1stderr을 주소 1001 > file로 이동 한 다음 stdout이 1008로 이동하는 것을 보는 것 입니다. 그러나 stderr를 1001로 유지합니다. 1001을 가리키는 모든 항목을 가져 와서 1008로 이동하지는 않지만 stdout을 참조하여 파일로 이동합니다.
다른 방법으로 stdout을 1008로 이동 한 다음 stdout이 가리키는 지점 (1008)으로 stderr을 이동합니다. 이렇게하면 둘 다 단일 파일을 가리킬 수 있습니다.


이 후 pid를 캡처 할 수 없습니다$!
chovy

8
또한 주목할 가치가 있습니다. &> file.outstdin과 stdout을 출력 파일로 리디렉션 하는 데 사용할 수 있습니다. 이렇게하면 2>&1명령 줄에서 잘못된 위치에 놓을 때 실수가 발생할 가능성이 줄어 듭니다 .
Dan

14

<Ctrl+Z>백그라운드에서 중지 하고 백그라운드에서 계속 하는 것은 명령 끝에서 bg실행하는 것과 같습니다 &.

따라서 백그라운드에서 실행하고 출력을 리디렉션하려면 다음을 수행하십시오.

java -jar myProgram.jar 2> errorOutput.log > output.log &

터미널을 떠날 때이 명령이 종료되지 않아야하는 경우에도 사용해야합니다. nohup


아 알 겠어요 첨부 된 '&'문자가 중복된다고 말하고 있습니까?
djangofan

나는 맨 페이지를 인용한다. nohup은 어쨌든 백그라운드에서 명령을 실행하기 때문에 백그라운드에서 nohup 자체를 실행하는 것은 불필요한 것 같습니다
RSFalcon7

10
nohup은 백그라운드에서 명령을 실행하지 않으므로 명시 적으로 추가해야합니다.&
jlliagre

3
을 사용하여 프로세스를 백그라운드로 이동 한 bg후을 실행하여 세션에서 프로세스를 분리 할 수 disown있으므로 터미널을 닫을 때 프로세스가 종료되지 않습니다.
코엔.

14
java -jar myProgram.jar &> output.log &

(가) 있습니다 &>output.log하는 표준 출력과 표준 에러를 모두 지시


3
한 줄로 설명하면 답변이 완료됩니다.
anaik

2
@ abhisheknaik96은 jar 파일을 실행하고 stdin과 stderr을 output.log로 리디렉션하여 백그라운드 프로세스로 만듭니다.
P Pang

2

nohup을 사용하는 대신 screen을 사용할 수 있습니다. 프로그램 상태를 실시간으로 볼 수 있습니다. 모든 출력을 파일에 기록 할 수도 있습니다. 연결 상태가 좋지 않거나 작동하지 않아서 로그 아웃 한 ssh를 통해 서버에 액세스 할 때 유용합니다. 로그인 한 후 남은 곳에서 작업을 계속할 수 있습니다. 참고 이 문제를 자세히 알 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.