Redirecționează nohup către stdout (Administrarea sistemului, Nohup)

Davoud Taghawi-Nejad a intrebat.

Este posibil ca un proces pornit cu nohup să scrie în stdout în loc de a scrie într-un fișier? sau poate în fișier și pe ecran?

nohup python start.py &

scrie în nohup.out, , dar aș vrea să iasă pe ecran, nohup este menit doar ca o acoperire atunci când conexiunea se întrerupe.

Comentarii

  • Dar ce se întâmplă când programul tău dă ieșire după ce conexiunea se întrerupe? –  > Por womble.
3 răspunsuri
Henk Langeveld

Puteți realiza acest lucru cu un proces separat pentru a inspecta fișierul sau utilizând un multiplexor de terminal, cum ar fi screen sau tmux.

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

Site-ul tail -f poate fi omorât și repornit în orice moment, fără a afecta procesul python.

  1. screen python start.py și se poate deconecta și reconecta în voie.

dsh

De la man nohup:

Dacă intrarea standard este un terminal, redirecționează-o de la /dev/null. Dacă ieșirea standard este un terminal, adăugați ieșirea la nohup.out dacă este posibil, $HOME/nohup.out în caz contrar. Dacă eroarea standard este un terminal, redirecționați-o către ieșirea standard. Pentru a salva ieșirea în FILE, utilizați nohup COMMAND > FILE.

(complet revizuit pe baza comentariilor )
La ieșirea dintr-un shell sau la închiderea unui terminal, proceselor copil li se va trimite SIGHUP (hangup, denumirea provine din perioada în care terminalele formau numărul de telefon la computerul UNIX) pentru a le spune că terminalul nu mai este conectat. În plus, atunci când procesul shell se încheie, fluxurile stdin, stdout și stderr ale procesului copil vor fi închise. De obicei, acest lucru duce la moartea procesului copil. De obicei, acesta este un lucru bun, deoarece evită să lase procesele în funcțiune fără utilizator.

Scopul instrucțiunii nohup este de a menține procesul în funcțiune chiar și după ce shell-ul se termină și terminalul se deconectează. Ca atare, direcționarea ieșirii sale către terminal contravine complet scopului. Răspunsul meu inițial (nohup COMMAND | cat) nu a fost de ajutor deoarece: atunci când terminalul este închis, ieșirea lui cat este închisă și astfel cat moare, ceea ce întrerupe conducta și trimite un SIGPIPE procesului nohup, provocând moartea acestuia. Am răspuns la întrebare fără să mă gândesc la scop.

Pentru a atinge scopul, rulați nohup COMMAND > FILE pentru a selecta numele fișierului în care să direcționați ieșirea. Apoi utilizați tail -f FILE pentru a urmări ieșirea pe un terminal.

În mod similar, se poate utiliza următoarea construcție de shell: COMMAND >FILE 2>&1 </dev/null & pentru a rula o comandă ale cărei fluxuri stdio nu sunt conectate la terminal și care poate continua să ruleze după ce terminalul este închis. În plus, în zsh, rulați shell-builtinul disown pentru a-i spune lui zsh să părăsească procesul în loc să îl ucidă atunci când se termină shell-ul.

Comentarii

  • O adăugare frumoasă: Dacă comanda nohup a fost deja pornită cu un nume de fișier, atunci puteți folosi tail -f filename pentru a vedea ce se scrie în fișier. –  > Por Hennes.
  • Nu funcționează, odată ce conexiunea se oprește, fișierul nu mai este scris –  > Por Davoud Taghawi-Nejad.
  • Aveți dreptate: am răspuns la întrebare (trimiterea ieșirii la terminal), dar am învins scopul. Mi-am rescris răspunsul în consecință. –  > Por dsh.
Vladimir Gamaley
[email protected]:~$ tty<br>
/dev/pts/8<br>
[email protected]:~$ ln -sf /dev/pts/8 nohup.out<br>
[email protected]:~$ 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  проекты

Tags: