Redirect nohup ke stdout

14

Apakah mungkin untuk membiarkan proses dimulai dengan nohup, menulis ke stdout, bukan dalam file? atau mungkin di file dan di layar?

nohup python start.py &

menulis nohup.out, tapi saya ingin output ke layar, nohup hanya dimaksudkan sebagai lindung nilai ketika koneksi terputus.

Davoud Taghawi-Nejad
sumber
Tetapi apa yang terjadi ketika output program Anda setelah koneksi terputus?
womble

Jawaban:

4
  1. nohup python start.py & tail -f nohup.out The tail -fdapat dibunuh dan restart di akan.

  2. screen python start.py dan lepaskan / sambungkan kembali sesuka hati.

Henk Langeveld
sumber
10

Dari man nohup:

Jika input standar adalah terminal, arahkan dari / dev / null. Jika output standar adalah terminal, tambahkan output nohup.out jika mungkin, $HOME/nohup.outsebaliknya. Jika kesalahan standar adalah terminal, arahkan kembali ke output standar. Untuk menyimpan output ke FILE, gunakan nohup COMMAND > FILE.

(sepenuhnya direvisi berdasarkan komentar)
Ketika keluar dari shell atau menutup terminal, proses anak akan dikirim SIGHUP (hangup, nama berasal dari saat terminal akan melakukan panggilan ke komputer UNIX) untuk memberi tahu mereka bahwa terminal tidak ada lagi terhubung. Selain itu, ketika proses shell berakhir, aliran stdin, stdout, dan stderr proses anak akan ditutup. Biasanya ini menyebabkan proses anak mati. Biasanya ini adalah hal yang baik karena menghindari meninggalkan proses yang berjalan tanpa pengguna.

Tujuan dari nohupprogram ini adalah untuk menjaga proses tetap berjalan bahkan setelah shell berakhir dan terminal terputus. Dengan demikian, mengarahkan outputnya ke terminal benar-benar mengalahkan tujuan. Jawaban asli saya ( nohup COMMAND | cat) tidak membantu karena: ketika terminal ditutup, output kucing ditutup dan kucing mati yang merusak pipa dan mengirimkan SIGPIPE ke proses nohup yang menyebabkannya mati. Saya telah menjawab pertanyaan tanpa memikirkan tujuannya.

Untuk mencapai tujuan Anda, jalankan nohup COMMAND > FILEuntuk memilih nama file untuk mengarahkan output. Kemudian gunakan tail -f FILEuntuk menonton output pada terminal.

Demikian pula, seseorang dapat menggunakan konstruksi shell berikut: COMMAND >FILE 2>&1 </dev/null &untuk menjalankan perintah yang stdio stream tidak terhubung ke terminal dan dapat terus berjalan setelah terminal ditutup. Selain itu, di zsh, jalankan shell-builtin disownuntuk memberi tahu zsh untuk meninggalkan proses alih-alih membunuhnya saat shell berakhir.

dsh
sumber
1
Satu tambahan yang bagus: Jika perintah nohup sudah dimulai dengan nama file, maka Anda dapat menggunakan tail -f filenameuntuk melihat apa yang ditulis ke file.
Hennes
Tidak berfungsi, setelah koneksi berhenti file tidak ditulis lagi
Davoud Taghawi-Nejad
Anda benar: Saya menjawab pertanyaan (mengirim output ke terminal) tetapi mengalahkan tujuannya. Saya menulis ulang jawaban saya sesuai dengan itu.
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  проекты
Vladimir Gamaley
sumber