Nohup'u stdout'a yönlendir


14

Bir işlemin nohup ile başlatılmasına izin vermek, dosya yerine stdout'a yazmak mümkün mü? veya belki dosyada ve ekranda?

nohup python start.py &

yazıyor nohup.out, ancak ekrana çıkmasını istiyorum, nohup sadece bağlantı koptuğunda bir çit anlamına gelir.


Ancak, program koptuktan sonra çıktısı ne olur?
womble

Yanıtlar:


4
  1. nohup python start.py & tail -f nohup.outtail -fÖldürülebilecekleri ve yeniden başlatılabilir.

  2. screen python start.py ve istediğiniz zaman bağlantıyı kesin / yeniden bağlayın.


10

Gönderen man nohup:

Standart giriş bir terminalse, / dev / null'dan yönlendirin. Standart çıkış bir terminalse, nohup.out mümkünse çıkışı ekleyin $HOME/nohup.out. Standart hata bir terminalse, standart çıkışa yönlendirin. Çıktıyı FILE dosyasına kaydetmek için tuşunu kullanın nohup COMMAND > FILE.

(bir yorumdan yola çıkarak tamamen revize edilir)
Bir kabuktan çıkarken veya bir terminali kapatırken, alt işlemlere terminalin daha uzun süre bağlı. Ayrıca, kabuk işlemi sona erdiğinde, alt işlemin stdin, stdout ve stderr akışları kapatılacaktır. Genellikle bu, çocuk sürecinin ölmesine neden olur. Genellikle bu iyi bir şeydir çünkü işlemlerin kullanıcısız çalışmasını engeller.

Programın amacı nohup, kabuk sona erdikten ve terminal bağlantısı kesildikten sonra bile işlemi çalışmaya devam ettirmektir. Bu nedenle, çıkışını terminale yönlendirmek amacı tamamen yener. Benim asıl cevabım ( nohup COMMAND | cat) işe yaramadı çünkü: terminal kapatıldığında, kedinin çıkışı kapatılır ve böylece kedi boruyu kıran ve nohup sürecine ölüme neden olan bir SIGPIPE gönderir. Soruyu, amacı düşünmeden cevaplamıştım.

Amacınıza ulaşmak için, nohup COMMAND > FILEçıktıyı yönlendireceğiniz dosyanın adını seçmek üzere çalıştırın . Ardından tail -f FILEbir terminaldeki çıkışı izlemek için düğmelerini kullanın .

Benzer şekilde, aşağıdaki kabuk yapısı da kullanılabilir: COMMAND >FILE 2>&1 </dev/null &stdio akışları terminale bağlı olmayan ve terminal kapatıldıktan sonra çalışmaya devam edebilen bir komutu çalıştırmak için. Ayrıca, zsh içinde, disownzsh'ye kabuk sona erdiğinde öldürmek yerine işlemi bırakmasını bildirmek için shell-yerleşkesini çalıştırın .


1
Güzel bir ek: Nohup komutu zaten bir dosya adıyla başlatılmışsa, dosyaya tail -f filenamene yazıldığını görmek için kullanabilirsiniz .
Hennes


Haklısın: Soruyu cevapladım (çıktıyı terminale gönderdim) ama amacı yendim. Cevabımı buna göre yeniden yazdım.
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  проекты
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.