다른 파일로 nohup 출력 리디렉션


5

나는 / nohup아래의 중요한 장기 실행 프로세스에 매우 자주 사용 하므로 거의 관용구입니다.linuxbashnohup time my command with arguments && mv nohup.out my.log

문제는이 nohup모두를두고 stdoutstderrnohup.out, 나는 파일의 이름을 제어 할 수 없습니다. 이것은 실수로 nohup같은 디렉토리에서 두 개의을 시작하면 출력이에 인터리브 됨을 의미합니다 nohup.out.

질문은 :

  1. 이 문제를 어떻게 처리합니까? 항상 nohup별도의 디렉토리 에서 s를 실행 하고 먼저 확인할 쉘 기능을 작성하면 ./nohup.out두 가지 옵션이 있습니다.

  2. nohup출력을 리디렉션 할 위치를 어떻게 알 수 없습니까? GNU 툴은 많은 옵션 을 갖는 경향이 있습니다 . 왜 그렇지 nohup않습니까?

답변:


7

stdout과 stderr 을 하나의 파일로 리디렉션 할 수 있습니다 . Bash 4 (또는 Zsh와 같은 다른 것)를 사용하면 다음과 같이 쉽습니다.

nohup <some-command> &> output.log

nohup출력을 설정하는 별도의 옵션이없는 이유는 알 수 없지만 셸에서 처리 할 수 ​​있으면 실제로 옵션이 필요하지 않습니다.


nohup자체 리디렉션을 수행 하지 못하게 됩니까?
grawity

1
GNU nohup는을 지정하면 stdout을 파일로 리디렉션한다고 말합니다 nohup command > file. BSD nohup는 이것을 전혀 언급하지 않았지만 나를 위해 일했습니다.
slhck

GNU nohup은nohup command > filenohup command > file 쉘이 아닌 쉘 에 의해 처리되는 경우 Isn redirection 을 지정 하지 않으면 stdout을 파일로 리디렉션한다고 말합니다nohup . 그렇다면 nohup날씨 방향 전환에 따라 어떤 조치를 취할 수 있습니까?
Piotr Dobrogost

nohup.out오류 출력의 경우에도 파일 이 작성됩니다. 그러나 stdout과 stderr을 모두 리디렉션하면 출력이 없으므로 파일이 생성되지 않습니다. 그러나 &>구문은 POSIX 호환이 아닙니다. 이 페이지의 다른 곳에서 Irshad Khan의 답변을 사용하는 것이 좋습니다.
tripleee

6

사용자 정의 파일에 출력추가 하기 위해 >>nohup 명령에서 사용할 수 있습니다 .

nohup php your_command >> filename.out 2>&1 &

이 명령은 오래된 데이터를 제거하지 않고 파일의 모든 출력을 추가합니다.


1
POSIX sh구문을 사용하여 출력 파일을 덮어 nohup your_command >filename.out 2>&1 &
쓰려면

3

nohupSIGHUP을 무시하도록 프로세스를 시작하는 것보다 더 많은 방법이 있습니다 . 예를 들면 다음과 같습니다 (셸 함수로 작성).

nohup() {
    setsid "$@"
}

nohup() {
    ("$@" &)
}

nohup() {
    "$@" & disown
}

( setsid또는 심지어 (setsid "$@" &)최선의 선택 일 수도 있습니다.)

그들 모두는 당신이 당신의 자신의 리디렉션을 지정할 수 있습니다 >, 2>&>/ >&.

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