Rediriger nohup vers stdout

14

Est-il possible de laisser un processus démarré avec nohup, d'écrire sur stdout plutôt que dans un fichier? ou peut-être dans le fichier et à l'écran?

nohup python start.py &

écrit nohup.out, mais j'aimerais qu'il s'affiche à l'écran, nohup n'est conçu comme une haie que lorsque la connexion est rompue.

Davoud Taghawi-Nejad
la source
Mais que se passe-t-il lorsque votre programme sort après la rupture de la connexion?
womble

Réponses:

4
  1. nohup python start.py & tail -f nohup.out Le tail -fpeut être tué et redémarré à volonté.

  2. screen python start.py et se déconnecter / se reconnecter à volonté.

Henk Langeveld
la source
10

De man nohup:

Si l'entrée standard est un terminal, redirigez-le depuis / dev / null. Si la sortie standard est un terminal, ajoutez la sortie nohup.out si possible, $HOME/nohup.outsinon. Si l'erreur standard est un terminal, redirigez-le vers la sortie standard. Pour enregistrer la sortie dans FILE, utilisez nohup COMMAND > FILE.

(entièrement révisé en fonction des commentaires)
Lors de la fermeture d'un shell ou de la fermeture d'un terminal, les processus enfants seront envoyés SIGHUP (raccrochage, le nom provient du moment où les terminaux se connecteraient à l'ordinateur UNIX) pour leur dire que le terminal n'est pas plus connecté. De plus, à la fin du processus shell, les flux stdin, stdout et stderr du processus enfant seront fermés. Cela entraîne généralement la mort du processus enfant. Habituellement, c'est une bonne chose car cela évite de laisser les processus s'exécuter sans utilisateur.

Le but du nohupprogramme est de maintenir le processus en marche même après la fin du shell et la déconnexion du terminal. En tant que tel, diriger sa sortie vers le terminal va complètement à l'encontre du but. Ma réponse d'origine ( nohup COMMAND | cat) n'a pas été utile car: lorsque le terminal est fermé, la sortie de chat est fermée et donc chat meurt, ce qui rompt le tuyau et envoie un SIGPIPE au processus nohup le faisant mourir. J'avais répondu à la question sans penser à l'objectif.

Pour atteindre votre objectif, exécutez nohup COMMAND > FILEpour sélectionner le nom du fichier vers lequel diriger la sortie. Ensuite, utilisez tail -f FILEpour regarder la sortie sur un terminal.

De même, on pourrait utiliser la construction shell suivante: COMMAND >FILE 2>&1 </dev/null &pour exécuter une commande dont les flux stdio ne sont pas connectés au terminal et peuvent continuer à fonctionner après la fermeture du terminal. De plus, dans zsh, exécutez le shell-builtin disownpour dire à zsh de quitter le processus au lieu de le tuer à la fin du shell.

dsh
la source
1
Un ajout intéressant: si la commande nohup a déjà été lancée avec un nom de fichier, vous pouvez utiliser tail -f filenamepour voir ce qui est écrit dans le fichier.
Hennes
Ne fonctionne pas, une fois la connexion interrompue, le fichier n'est plus écrit
Davoud Taghawi-Nejad
Vous avez raison: j'ai répondu à la question (envoyer la sortie au terminal) mais j'ai échoué. J'ai réécrit ma réponse en conséquence.
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
la source