nohup: ignorowanie danych wejściowych i przekierowywanie stderr na standardowe wyjście

19

Zaczynam moją aplikację w tle, używając, nohupjak wspomniano poniżej -

root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out &
[1] 30781
root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout

Ale za każdym razem, gdy widzę tę wiadomość -

nohup: ignoring input and redirecting stderr to stdout

Czy pojawią się problemy, jeśli zobaczę ten komunikat? Co to znaczy i jak mogę tego uniknąć?

Arsenał
źródło
2
czy próbowałeś:nohup java -jar blaa bla >/tmp/test.out 2>&1 &
Rahul Patil
zamiast używać /tmp/test.outmogę użyć exhibitor.out. Przepraszam, że zadałem głupie pytanie, ponieważ jestem całkiem nowy w tych sprawach ...
arsenał
tak .. możesz użyć .. to tylko standardowy błąd / plik wyjściowy. ale jaki jest status po dodaniu 2>&1?
Rahul Patil,

Odpowiedzi:

20

Aby upewnić się, że aplikacja jest odłączona od swojego terminala - aby nie zakłócała ​​poleceń pierwszego planu i działała po wylogowaniu - upewnij się, nohupże ani stdin, ani stdout, ani stderr nie są urządzeniami podobnymi do terminali. Dokumentacja opisuje, jakie działania trzeba:

Jeśli standardowym wyjściem jest terminal, wszystkie dane wyjściowe zapisane przez nazwane narzędzie na jego standardowym wyjściu należy dołączyć na końcu pliku nohup.out w bieżącym katalogu. Jeśli nie można utworzyć lub otworzyć pliku nohup.out w celu dołączenia, dane wyjściowe należy dołączyć na końcu pliku nohup.out w katalogu określonym przez zmienną środowiskową HOME. Jeśli żaden plik nie może zostać utworzony ani otwarty w celu dołączenia, narzędzie nie będzie wywoływane.

Jeżeli standardowym błędem jest terminal, wszystkie dane wyjściowe zapisane przez nazwany program narzędziowy na jego standardowym błędzie zostaną przekierowane do tego samego deskryptora pliku, co standardowe wyjście.

Przekierowałeś stdout do pliku podczas pisania > exhibitor.outw linii poleceń. Jeśli nie masz nic przeciwko, aby stderr aplikacji był skierowany do tego samego pliku co jego standardowe wyjście, nie musisz nic więcej robić. Lub możesz przekierować stderr do innego pliku, dodając argument taki jak 2> exhibitor.err. (Dzięki nieznanemu użytkownikowi - moje powiadomienia nie wyświetlały nazwy - za sugerowanie włączenia tej alternatywy).

Mark Plotnick
źródło
2
Jest to także przydatne, aby zamknąć wejście fd ręcznie tak: </dev/null; Linux zrobi to automatycznie, ale jeśli nie zostanie to zrobione ręcznie, nadal otrzymasz wiersz w wyjściu nohup, który brzmi:nohup: ignoring input
wulfgarpro
17

Możesz pozbyć się komunikatu, jeśli przekierujesz błąd std na standardowe wyjście:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1 &
shargors
źródło
4

W mojej sytuacji przekierowuję stdout i stderr, ale wyświetla się również w pliku dziennika:

nohup: ignoring input

Aby usunąć to ostrzeżenie, musisz również przekierować standardowe wejście w następujący sposób:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1  </dev/null &

Zdaję sobie sprawę, że ta odpowiedź jest dla ciebie zdecydowanie za późna, ale może pomogłaby innym.

styshoo
źródło