Czy można pozwolić procesowi rozpocząć się od nohup, napisać na stdout zamiast w pliku? a może w pliku i na ekranie?
nohup python start.py &
pisze nohup.out
, ale chciałbym, aby wyświetlało się na ekranie, nohup jest rozumiany tylko jako zabezpieczenie, gdy połączenie zostanie zerwane.
Odpowiedzi:
nohup python start.py & tail -f nohup.out
tail -f
Można zabić i ponownie w razie potrzeby.screen python start.py
i rozłącz / połącz ponownie do woli.źródło
Od
man nohup
:(całkowicie zmieniony na podstawie komentarzy)
Podczas wychodzenia z powłoki lub zamykania terminala procesy potomne będą wysyłane SIGHUP (zawieszenie, nazwa pochodzi od momentu, w którym terminale wybiorą numer do komputera z systemem UNIX), aby poinformować ich, że terminal nie jest już podłączony. Ponadto po zakończeniu procesu powłoki strumienie stdin, stdout i stderr procesu potomnego zostaną zamknięte. Zwykle powoduje to śmierć procesu potomnego. Zwykle jest to dobra rzecz, ponieważ pozwala uniknąć uruchamiania procesów bez użytkownika.
Celem tego
nohup
programu jest utrzymanie procesu nawet po zakończeniu powłoki i odłączeniu terminala. Jako takie, kierowanie jego wyjścia do terminala całkowicie niweczy cel. Moja pierwotna odpowiedź (nohup COMMAND | cat
) nie była pomocna, ponieważ: kiedy terminal jest zamknięty, wyjście kota jest zamknięte, więc kot umiera, co łamie rurę i wysyła SIGPIPE do procesu nohup, powodując jego śmierć. Odpowiedziałem na to pytanie, nie myśląc o celu.Aby osiągnąć swój cel, uruchom,
nohup COMMAND > FILE
aby wybrać nazwę pliku, do którego chcesz skierować dane wyjściowe. Następnie użyj,tail -f FILE
aby obejrzeć wyjście na terminalu.Podobnie można użyć następującej konstrukcji powłoki:
COMMAND >FILE 2>&1 </dev/null &
aby uruchomić polecenie, którego strumienie stdio nie są podłączone do terminala i mogą kontynuować działanie po zamknięciu terminala. Dodatkowo w zsh uruchom wbudowaną powłokę,disown
aby powiedzieć zsh, aby opuścił proces zamiast zabijać go po zakończeniu powłoki.źródło
tail -f filename
aby zobaczyć, co jest zapisane w pliku.źródło