Назад | Перейти на главную страницу

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

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

nohup python start.py &

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

Из 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 покинуть процесс, а не убить его при завершении оболочки.

Вы можете добиться этого с помощью отдельного процесса проверки файла или с помощью терминального мультиплексора, например screen или tmux.

  1. nohup python start.py & tail -f nohup.out

В tail -f может быть убит и перезапущен по желанию, не затрагивая процесс python.

  1. screen python start.py и отключите / повторно подключитесь по желанию.
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  проекты