다른 파일로 nohup 출력 리디렉션 시작하면 출력이에 인터리브 됨을 의미합니다 nohup.out. 질문은

나는 / 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않습니까?



답변

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

nohup <some-command> &> output.log

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


답변

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

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

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


답변

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

nohup() {
    setsid "$@"
}

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

nohup() {
    "$@" & disown
}

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

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