Перенаправить nohup на стандартный вывод

14

Можно ли позволить процессу, запущенному с nohup, писать в стандартный вывод, а не в файл? или может в файле и на экране?

nohup python start.py &

пишет nohup.out, но я хотел бы, чтобы он выводил на экран, nohup предназначен только для хеджирования, когда разрывается соединение.

Давуд Тагави-Неджад
источник
Но что происходит, когда ваша программа выводит данные после разрыва соединения?
womble

Ответы:

4
  1. nohup python start.py & tail -f nohup.outtail -fМогут быть убиты и перезапущена по желанию.

  2. screen python start.py и отключить / повторно подключиться по желанию.

Хенк Лангевельд
источник
10

От man nohup:

Если стандартный ввод является терминалом, перенаправьте его из / dev / null. Если стандартный вывод является терминалом, добавьте вывод, nohup.out если возможно, в $HOME/nohup.outпротивном случае. Если стандартной ошибкой является терминал, перенаправьте его на стандартный вывод. Чтобы сохранить вывод в файл, используйте nohup COMMAND > FILE.

(полностью пересмотрено на основе комментариев)
При выходе из оболочки или закрытии терминала дочерние процессы будут отправлены SIGHUP (зависание, имя происходит со времени, когда терминалы будут подключаться к компьютеру UNIX), чтобы сообщить им, что терминал не больше подключен Кроме того, когда завершится процесс оболочки, потоки stdin, stdout и stderr дочернего процесса будут закрыты. Обычно это приводит к смерти детского процесса. Обычно это хорошо, потому что позволяет избежать запуска процессов без пользователя.

Цель nohupпрограммы - сохранить процесс работоспособным даже после завершения оболочки и отключения терминала. Таким образом, направление его вывода на терминал полностью противоречит цели. Мой первоначальный ответ ( nohup COMMAND | cat) не помог, потому что: когда терминал закрыт, вывод cat закрывается, и cat умирает, что разрывает канал и отправляет SIGPIPE процессу nohup, что приводит к его смерти. Я ответил на вопрос, не думая о цели.

Для достижения цели запустите, nohup COMMAND > FILEчтобы выбрать имя файла для прямого вывода. Затем используйте tail -f FILEдля просмотра вывода на терминале.

Точно так же можно использовать следующую конструкцию оболочки: COMMAND >FILE 2>&1 </dev/null &для запуска команды, чьи потоки stdio не подключены к терминалу и могут продолжать работать после закрытия терминала. Кроме того, в zsh запустите встроенную оболочку, disownчтобы сказать zsh, что нужно покинуть процесс, а не убивать его по окончании оболочки.

DSH
источник
1
Одно приятное дополнение: если команда nohup уже была запущена с именем файла, вы можете использовать, tail -f filenameчтобы увидеть, что записано в файл.
Hennes
Не работает, как только соединение прекращается, файл больше не записывается
Давуд Тагави-Неджад
Вы правы: я ответил на вопрос (отправить вывод на терминал), но победил цель. Я переписал свой ответ соответственно.
dsh
-1
vladimir@lin-mint-cin:~$ tty<br>
/dev/pts/8<br>
vladimir@lin-mint-cin:~$ ln -sf /dev/pts/8 nohup.out<br>
vladimir@lin-mint-cin:~$ nohup ls<br>
nohup: ввод игнорируется, вывод добавляется в 'nohup.out'<br>
2019-05-31-090159.jpg    giphy.gif        nim_porojects   sketchbook
Aptana_Studio_Workspace  IdeaProjects         nohup.out       target
Desktop          jack_capture_01.wav  Pictures        Templates
Documents        lib              Postman         tmp
Downloads        mad              Projects        trace.edn
eclipse          Mail             prolog_ws       uinfild_hill-iskusstvo_shemotehniki_tom_1_izd4-e-1489315100.pdf
eclipse-dsl-workspace    Music            proxy-secret    Videos
eclipse-workspace    mygolo           Public          workspace-dltk
erlang_ex        my_golo_ws       rust-workspace  проекты
Владимир Гамалей
источник