GNU/Linux >> Linux Esercitazione >  >> Linux

Impedire a Gnu Screen di terminare la sessione una volta terminato lo script eseguito?

Sto cercando di forzare lo schermo GNU a creare un terminale "virtuale", senza collegarlo ad esso, eseguire lo script all'interno e NON terminare la sessione una volta terminato lo script.

Ho provato molte combinazioni, tra cui:

screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh

o

screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh

e nessuno di loro ha funzionato. O ricevo la sessione senza lo script eseguito, lo script viene eseguito, ma la sessione viene terminata al termine o viene visualizzato l'errore "Nessuna sessione dello schermo trovata".

Quello che sto fondamentalmente cercando di fare è eseguire il listener UDP, scritto in PHP e farlo funzionare in loop infinito (non interrompere l'ascolto). Sì — potrei eseguire lo script PHP con & alla fine, forzando l'esecuzione della CLI PHP come demone. Il problema è che sto usando un pezzo di spazzatura chiamato server (QNAP - mai, mai comprare questa spazzatura!) Che sembra ignorarlo. Non appena esco dalla sessione SSH, gli script si interrompono.

Quindi screen sembra essere l'unica opzione. Ma non riesco a capire, perché termina la sessione una volta eseguito il comando o lo script termina?

MODIFICA :Ho anche provato un esempio trovato in Internet:

screen -dmS name
screen -S name -p windowname -X stuff 'mc
'

Nessuna mancanza! Dopo averlo allegato (screen -R name ) Vedo che il comandante di mezzanotte NON È stato giustiziato. Anche se l'autore dell'esempio ha detto, lo sarà.

Risposta accettata:

Per mantenere lo schermo occupato dopo il completamento dello script, mantieni qualcosa di persistente in esecuzione in una finestra. La scelta più semplice per quel "qualcosa" è probabilmente una shell interattiva. Ecco un modo per farlo (supponendo che bash come la scelta della shell interattiva):

screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
  • -dm :avvia lo schermo in modalità staccata
  • -S :imposta il nome della sessione per lo schermo per un più facile recupero in seguito
  • sh -c '...' :invece di eseguire semplicemente il tuo script, che terminerà, usa sh -c per eseguire più comandi
  • exec bash :dopo che lo script è terminato, sh dall'alto passerà a una shell interattiva (bash ), che non dovrebbe mai uscire finché qualcosa di esterno non lo termina. Ciò manterrà lo screen aperto finché bash l'istanza è viva.

Linux
  1. Invio di input a una sessione dello schermo dall'esterno?

  2. Schermata Gnu:stampare una sessione separata su Stdout?

  3. Come sapere se sono in una sessione Tmux da uno script Bash?

  4. Screenshot di X da Tty?

  5. Impedire a Signt di raggiungere i processi figlio?

Come utilizzare GNU Screen per gestire le sessioni del terminale in Linux

Rimuovi la sessione GUEST dalla schermata di accesso di Ubuntu

Come eseguire uno script al termine della sessione xfce

Come posso impedire a Ubuntu di mettere in stop il mio monitor?

Rinomina la sessione dello schermo

Come configurare D-Bus e SSH X-Forwarding per evitare che SSH si blocchi all'uscita?