2012-07-29 02:04:52 +0000 2012-07-29 02:04:52 +0000
82
82

Come eseguire un comando in schermo e staccare?

Come posso fare in modo che lo schermo esegua un comando e poi si stacchi (cioè automaticamente in un singolo script senza ulteriori input oltre all'avvio iniziale dello script)? Ad esempio, eseguo myscript.sh e questo avvia automaticamente una sessione dello schermo, esegue un comando e poi si stacca.

Risposte (5)

120
120
120
2012-07-29 02:20:11 +0000

Questo è facile:

screen -d -m yourcommand
49
49
49
2012-07-29 02:10:53 +0000

Per eseguire un singolo comando nello schermo e staccare, si può provare:

screen -dm sleep 10

Per eseguire più comandi, provate:

screen -dm bash -c "sleep 10; myscript.sh"

Notate che quando un programma termina, screen (per default) uccide la finestra che lo conteneva.

Se non vuoi che la tua sessione venga uccisa dopo la fine dello script, aggiungi exec sh alla fine, ad es:

screen -dm bash -c 'sleep 5; exec sh'

Per elencare tutte le tue sessioni, prova:

screen -list

Correlato: Avvia schermo Unix, Esegui comando, Stacca .

16
16
16
2016-11-06 08:03:26 +0000

Per avviare una nuova sessione in background con il nome ‘sleepy’

screen -S sleepy -dm sleep 60

Per uccidere la sessione ‘sleepy’

screen -S sleepy -X quit
3
3
3
2018-03-14 05:40:50 +0000
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
0
0
0
2019-04-29 09:38:39 +0000

Mi è successo quando ho premuto control c (sig int) per uscire dal mio programma. esce da tutte le bash. così ho trovato questo per catturare SIGINT. e prevenire l'uscita dall'ultima bash. (è necessario digitare exit per uscire)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"

example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ; bash"

Trovo utile usare cron per eseguire programmi nodejs all'avvio. e per eseguire lo schermo all'avvio. in cron ci sono eventi speciali sintassi @reboot event

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"