Czy istnieje sposób przekierowania wyjścia nohup do pliku dziennika innego niż nohup.out?

112

Często używam tego programu nohup, aby moje procesy były odporne na zawieszanie się. Więc jeśli chcę, aby program był programodporny na zawieszanie się, używam polecenia

nohup program &

gdzie &umieszcza proces w tle.

Podczas uruchamiania wyświetla nohupmi komunikat:

nohup: dołączanie wyjścia do `nohup.out '

Czy istnieje jakiś sposób, aby wysłać dane wyjściowe do pliku innego niż nohup.out? Często chcę uruchamiać wiele procesów w tym samym katalogu nohup, ale jeśli to zrobię, wszystkie dane wyjściowe zostaną zebrane w jednym nohup.outpliku.

Strona podręcznika (na przykład tutaj ) wydaje się nie zawierać opcji określania pliku dziennika. Czy możesz to potwierdzić? Czy zastanawiasz się też, jak mogę obejść ten problem?

Andrzej
źródło
3
Spóźniony rok, ale dobra kompleksowa odpowiedź została podana tutaj: stackoverflow.com/questions/4549489/…
Rahul Jha

Odpowiedzi:

132

Strona podręcznika GNU coreutils nohupwskazuje, że możesz użyć normalnego przekierowania:

Jeśli standardowym wejściem jest terminal, przekieruj go z / dev / null. Jeśli standardowym wyjściem jest terminal, dołącz wyjście do „nohup.out”, jeśli to możliwe, w przeciwnym razie „$ HOME / nohup.out”. Jeśli błąd standardowy to terminal, przekieruj go na standardowe wyjście. Aby zapisać dane wyjściowe do PLIKU, użyj polecenia „nohup COMMAND> FILE”.

Edycja: Na początku nie przeczytałem twojego linku; możesz mieć inną wersję nohup, chociaż ta sekcja sugeruje, że nadal możesz używać normalnego przekierowania:

 nohup.out          The output file of the nohup execution if
                    standard  output is a terminal and if the
                    current directory is writable.

Możesz przekierować standardowe wyjście i standardowy błąd do różnych plików:

nohup myprogram > myprogram.out 2> myprogram.err

lub do tego samego pliku:

nohup myprogram > myprogram.out 2>&1
Łk
źródło
54
Aby odpowiedzieć konkretnie: użyj, nohup program > program.out &aby zapisać wynik program.outzamiastnohup.out
Jim Paris
4
I nie jest to specyficzne dla narzędzi GNU, zachowanie jest określone przez POSIX.
Gilles,
3
Wydaje się, że to nie działa. Przekierowuje wyjście komendy nohup zamiast wyjścia myprogramu.
Kris
2
@Kris Przekierowanie powinno nastąpić przed końcową &postacią
Junnen