Esegui un comando in una shell e continua a eseguire il comando quando chiudi la sessione

StackOverflow https://stackoverflow.com/questions/431521

  •  08-07-2019
  •  | 
  •  

Domanda

Sto usando Putty per connettermi a un server remoto. Quello che voglio sapere è se c'è un modo per scrivere i miei comandi e consentire loro di continuare a funzionare dopo aver chiuso la sessione con Putty. La ragione di ciò è che non voglio tenere il computer sempre acceso. C'è un modo per farlo ?.

Aggiorna con la soluzione

Per la mia domanda, poiché viene presentata la soluzione migliore è utilizzare uno dei comandi forniti come nohup , perché non è necessario installare alcun software aggiuntivo. Ma se ti trovi nello stesso problema, usa la schermata, installala e usala. È fantastico.

Ho selezionato la risposta di Norman Ramsey come preferita perché propongo diverse soluzioni usando i comandi e schermo . Ma controlla le altre risposte in particolare quella di PEZ, quindi ottieni una visione di ciò che lo schermo è in grado di fare.

È stato utile?

Soluzione

nohup , disown e screen sono tutti buoni ma screen è il migliore perché a differenza degli altri due , screen ti consente di disconnetterti dal server remoto, mantenere tutto in esecuzione e riconnetterti in seguito per vedere cosa sta succedendo. Con nohup e disown non puoi riprendere a interagire.

Altri suggerimenti

schermo! È la cosa migliore dopo il pane a fette. (Sì, so che altri l'hanno già suggerito, ma è così bello che tutto il mondo dovrebbe unirsi e suggerirlo.)

Lo schermo

è come, ad esempio, ummmm ... come usare VNC o simili per connettersi a un destop della GUI, ma per le finestre della shell dei comandi. Puoi avere diverse shell " windows " si apre contemporaneamente nella stessa schermata. Puoi fare cose come:

  1. Avvia una sessione di schermate usando " screen -dR " (abituarsi a usare -dR)
    • esegui alcuni comandi in una finestra
    • premi CTRL - A , C per creare una nuova finestra apri un file lì in vim
    • premi CTRL - A , 0 per tornare alla prima finestra ed eseguire alcuni comandi sul file che hai appena modificato
    • CTRL - A , 1 per tornare alla tua sessione vim
    • CTRL - A , C per l'ennesima finestra e forse fai " sudo - su " (perché ti serve solo una shell radice completa)
    • CTRL - A , 0 e avvia un processo in background
    • CTRL - A , C per creare ancora una nuova finestra, " tail -f " il registro per quel processo in background
    • CTRL - A , d per disconnettere lo schermo quindi CTRL - D per disconnettersi dal server
    • Andare in vacanza per tre settimane
    • Accedi nuovamente al server ed emetti " screen -dR " per connettersi alla sessione dello schermo esistente
    • controlla il registro nella quarta finestra con CTRL - A , 3 (è come se fossi stato lì a guardarlo tutto tempo)
    • CTRL - A , 1 per riprendere quella sessione vim
    • Immagino che stai iniziando a ottenere l'immagine adesso? =)

È come per magia. Sto usando lo schermo da più tempo di quanto possa ricordare e sono ancora totalmente stupito da quanto sia dannatamente bello.

MODIFICA : voglio solo menzionare che ora c'è anche tmux . Assomiglia molto allo schermo , ma ha alcune caratteristiche uniche, dividendo le finestre come la più importante.

Prova a utilizzare GNU Screen . Ti consente di aprire più shell contemporaneamente. E puoi disconnetterti da quelle shell in esecuzione (cioè chiudere la sessione con Putty) e continueranno a fare le loro cose.

Quello che stai cercando è nohup .

Vedi il link wiki per come usarlo.

Lo schermo

è il migliore.

Prova:

schermo -dmS " MyTail " tail -f / var / log / syslog

Questo comando di avvio in background.

Usa lo schermo -r per elencare eo lo schermo -r Mytail per entrare nella sessione.

Se è necessario che più utenti accedano alla stessa sessione, utilizzare: screen -rx MyTail ed entrambi o più utenti condividono la sessione.

Se non puoi usare screen (perché, ad esempio, la tua sessione SSH è guidata a livello di programmazione), puoi anche usare daemonize per eseguire il programma come demone.

Un modo che funziona bene per me è su .

at funziona come cron, ma per un lavoro una tantum. L'ho usato oggi per scaricare un file di grandi dimensioni senza dover mantenere viva la mia sessione.

ad esempio:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

Passi a alla volta (in futuro) e ti viene richiesto. Inserisci i comandi che desideri eseguire in quel momento e premi ctrl + d. Puoi uscire dalla sessione e eseguirà i comandi all'ora specificata.

Wikipedia ha maggiori informazioni su su .

./command & disown
ssh localhost && ./command && exit
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top