Creare la schermata e eseguire il command senza attaccare

Sto lavorando all'automazione di una routine di manutenzione che prevede l'avvio e l'arresto di uno script in esecuzione in una session di visualizzazione. Il mio approccio è quello di uccidere la session di schermo e quindi riavviarlo e eseguire il command da un script utilizzando le abilità per creare sia una schermata che passare un command senza bisogno di attaccare allo schermo.

Tuttavia, ho difficoltà a questo. Posso creare lo schermo correttamente senza collegarlo utilizzando lo screen -d -m -S screen_name . Tuttavia, se eseguo un command basato su:

screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''

con l'eco -ne '\ 015' che è avvolto da indietro rispetto a singole citazioni. È quello di simulare l'utente premendo il tasto Enter poiché i comandi che utilizzo si muovono in una directory e eseguono uno script che è presente. Questo command funziona, ma solo se lo schermo è stato collegato una volta che è stato creato. Mentre cerco di automatizzare il process di creazione dello schermo e di eseguire i comandi in esso, vorrei evitare di wherer attaccare e disinserire all'interno di uno script. Proverò il suggerimento di creare uno script di shell contenente i comandi da eseguire all'interno dello schermo e modificare in base ai miei risultati.

C'è un modo per creare uno schermo e eseguire un command all'interno dello schermo in un solo command o senza wherer collegarsi allo schermo dopo la creazione ma prima dell'esecuzione del command?

Grazie in anticipo.

** Aggiornamento – dopo aver provato il suggerimento di inserire i comandi da eseguire in uno script di shell ho potuto creare con successo una schermata ed eseguire i comandi dall'interno dello schermo, ma ho il comportmento che quando lo script si arresta lo schermo si chiude pure. Questo non dovrebbe essere un problema in quanto lo script è uno script di logging che dovrebbe interrompere solo con la conoscenza dell'amministratore sys o attraverso lo script che cerco di sviluppare, tuttavia sarebbe preferibile avere la configuration dello schermo in modo tale che lo schermo non scompare se lo script viene interrotto. È ansible get questo comportmento? **

  • Linux Redhat "Screen" non si stacca
  • Password per il command GNU screen lockscreen?
  • Come faccio a impedire a GNU Screen di risolvere il mio prompt?
  • Come sapere chi è connesso al mio schermo e where è sullo schermo?
  • Come automatizzare l'avvio di una session di session multiutente con l'aggiunta di acl ad un altro utente?
  • Come utilizzare i tasti cursore in vi sotto lo schermo?
  • C'è un modo per avere lo schermo GNU automaticamente aprire un numero di schermate la prima volta che inizia una nuova session?
  • staccare la session di schermo
  • 4 Solutions collect form web for “Creare la schermata e eseguire il command senza attaccare”

    Penso che tu possa essere in esecuzione in varie questioni.

    Se il command finisce prima di ricolbind, lo schermo scompare. È ansible eseguire una demo utilizzando:

     screen -d -m ls -l 

    ls -l command ls -l , ma screen -list non verrà visualizzata quando il process dello schermo è terminato.

    Non ho altresì idea di cosa stai cercando di fare con questa roba. Forse l'aggiornamento della tua domanda potrebbe aiutare, in quanto ciò che penso che stai cercando di fare è eseguire più comandi in una session di schermo. Questo dovrebbe essere semplice come:

     screen -d -m bash -c "command1 ; command2 ; command3" 

    Se questi sono usati molto, forse si dovrebbe fare uno script di shell che esegue solo questi comandi, quindi utilizzare un più semplice:

     screen -d -m /path/to/script.sh 

    Ho incontrato questo problema prima, era un bug con l'implementazione di cygwin.

    Quello che ho fatto è creare un ".screenrc_detaching" avente solo il seguente command

     #detach detach 

    e quindi avviare la schermata con

     screen -c ~/loginScripts/tempScreenrc/.screenrc_detaching 

    Poi hai la session di schermo e la sua è già stata collegata e staccata e sei bravo a pompare i comandi.

    Facile ! : P

    Questo mi ha fatto il lavoro, senza che non funzionasse

    screen -d -m bash -c "command1; command2; command3"

    Avviare una schermata distaccata

     screen -dmS <screen name> 

    Esegui il command nella schermata separata precedentemente creata

     screen -S <screen name> -X stuff '<CMD>\n' 

    Sì, devi digitare il simbolo di immissione per submit il command o altrimenti aggiungere la string allo schermo.

    http://osdir.com/ml/gnu.screen/2003-09/msg00029.html

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.