Come posso mantenere vivo un processo dopo aver chiuso la sessione di stucco?


41

Sto usando putty per interagire con il server Linux. Ho iniziato un processo usando stucco. Il processo è in esecuzione e richiederà 5-6 ore. Voglio che questo processo continui a funzionare dopo aver chiuso la sessione di stucco. Come posso mantenere vivo quel processo dopo aver chiuso la sessione di stucco? Non voglio tenere il computer sempre acceso. C'è un modo per fare questo?.

Risposte:


32

Uso lo schermo per quel tipo di cose. In realtà a volte lo lascio per un bel po 'così posso tornare a quello che stavo facendo.


Il processo è in esecuzione ora, funziona per quel processo? Sto chiedendo perché il processo è nel mezzo e non voglio riavviarlo ora

+1 per menzionare il mio strumento di riga di comando preferito indiscusso. È un gioiello in situazioni come questa.
Noufal Ibrahim,

@Noufal, totalmente! @prakash, devi eseguire lo schermo prima di poter avviare qualsiasi processo
ziya,

Se vuoi connetterti a più macchine, può anche essere una buona idea eseguire diverse schermate all'interno della prima schermata, quindi devi solo collegarti a una schermata per accedere a tutti i telecomandi in esecuzione.

il collegamento non funziona più
Malky.Kid

31
^Z
bg %1
disown -h %1

Il '-h' rende il processo immune a SIGHUP al termine della sessione.


3
Nota che non c'è modo di "riscattare" o "adottare" il processo: una volta fatto, non potrai più riportarlo in primo piano. Se il processo è un lavoro batch che lavora per produrre alcuni file, ciò non dovrebbe importare.

19

Usa il nohupcomando Basta prefissarlo al tuo comando e li demonizzerà in modo che non si fermino quando si disconnette / termina la sessione della shell. L'output standard sarà di default in un file chiamato nohup.out. Consultare la pagina del manuale nohup(1)per ulteriori informazioni.


il processo è in esecuzione, funziona per quel processo? Sto chiedendo perché il processo è nel mezzo e non voglio riavviarlo ora?

Troppo tardi ... almeno, per le normali operazioni. Non sarebbe del tutto sorprendente scoprire che se si collega un debugger al processo e lo si è modificato con un set appropriato di chiamate di sistema, allora forse è possibile metterlo in background. Ma non è ciò che potrebbe essere raccomandato - non mi preoccuperei, per esempio, e ho almeno un'idea di ciò che potrebbe essere coinvolto. Hai due scelte ora ... o rimani connesso fino al termine, oppure interrompi il processo corrente e riavviane uno nuovo usando nohup.
Jonathan Leffler,

1
Se stai usando bash (e penso che zsh), puoi usare la soluzione di Tom Anderson e disownil processo in modo che continui a funzionare anche quando ti disconnetti.
Noufal Ibrahim,

Sì, il disown sembra essere la strada da percorrere per un lavoro già in esecuzione. È fattibile perché la shell che ha avviato il lavoro può manipolare le proprietà necessarie.
Jonathan Leffler,

5

Inizia il processo con nohup "processname" &. Puoi anche staccarlo con screeno tmux.


3

Le soluzioni di cui sopra sono abbastanza ben descritte, tuttavia, nessuna di esse ha funzionato per me FINO A quando ho anche modificato la configurazione di PuTTY in:

Abilita keepalive TCP (opzione SO_KEEPALIVE)

Non l'avevo visto da nessun'altra parte e l'ho trovato solo per tentativi ed errori.


1

Ctrl + z Invia il processo corrente in background.

Inoltre, è possibile aggiungere e alla fine del comando per eseguire in background


4
Normalmente control-z mette il processo in uno stato di animazione sospesa; il comando bg lo mette in secondo piano. Tuttavia, ciò mantiene anche il processo collegato al terminale, mentre nohup lo stacca dal terminale e quindi consente al mastice di disconnettersi e il processo sopravvive alla disconnessione.
Jonathan Leffler,

Ho scoperto che usando '&' per inviare in background funziona con putty, ma quando mi connetto usando direttamente ssh da una shell, se chiudo la connessione, il processo in background viene interrotto. Qualche idea del perché?
Zardoz89,

0

Se si desidera che il programma contenuto nel processo venga sempre o frequentemente eseguito in background, è possibile codificarlo per separarlo dal terminale di controllo (rendere tale comportamento controllabile tramite un flag di opzione) ed eseguire in background.

Questa è una soluzione a lungo termine, ovviamente, non per il processo attualmente in esecuzione.


0

È possibile utilizzare &dopo il collegamento.

Esempio:

[localhost ~ ]# wget http://www.link.com/download/download.zip &

La domanda non riguardava un collegamento, vuoi dire aggiungere un &segno dopo la riga di comando?
Danny,

0

Come mantenere weblogic in esecuzione dopo aver chiuso la finestra di stucco:

Semplici passi: dopo il login tramite putty segui i seguenti passaggi:

  1. Vai alla directory sul server in cui startWebLogic.shsi trova il comando.
  2. Digita command screene premi Enter(si aprirà una nuova schermata).
  3. Nella nuova schermata digitare il comando di esecuzione ./startWebLogic.sh.
  4. Premere Ctrl+ aquindi premere d(senza tenere premuto Ctrl); tornerai alla schermata precedente.
  5. Quando si desidera tornare alla schermata del registro del server, digitare command screen -r.

0

se il processo è per nodejs, e potrebbe essere la tua intenzione poiché lo hai pubblicato originariamente su StackOverflow. Inizialmente stavo cercando questa domanda da solo. Ho trovato pm2 ed è fantastico. Le altre risposte possono essere d'aiuto per lo stucco generale, ma se è specifico per il nodo questa è di gran lunga la risposta migliore, dato che esiste un monitoraggio integrato e l'installazione è semplicemente un

$ npm install pm2 -g
$ cd yourappdirectory

"PM2 è un gestore di processi di produzione per applicazioni Node.js con un bilanciamento del carico integrato. Ti consente di mantenere le applicazioni in vita per sempre, ricaricarle senza tempi di inattività e facilitare le attività di amministrazione di sistema comuni.

L'avvio di un'applicazione in modalità di produzione è semplice come: "

$ pm2 start yourappname.js

"usando il comando save and thenze si abilita l'avvio automatico dei processi al riavvio"

$ pm2 save
$ pm2 freeze

per monitorare il suo

$ pm2 monit

e si riavvia

$ pm2 restart yourappname

anche per le informazioni di registrazione diretta

$ pm2 logs

Ora posso facilmente eseguire due finestre putty invece di usare la mia finestra del browser digialocean (che non potrei scorrere su); Per maggiori informazioni vedi il github principale

https://github.com/Unitech/pm2

è fantastico.


Si può spiegare un po 'di più su ciò PM2 è e quali sono i comandi che mostrano fare? Si prega di non rispondere nei commenti; modifica la  tua risposta per renderla più chiara e completa.
G-Man dice "Reinstate Monica" il

Aggiunta di un po 'più di documentazione per la comunità. Vorrei aver trovato pm2 anni fa.
Sasy Solutions
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.