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

¿Cómo se ejecuta un comando en pantalla y se desprende?

¿Cómo puedo conseguir que screen ejecute un comando y luego se desconecte (es decir, automáticamente en un solo script sin más entrada que la de iniciar inicialmente el script)? Por ejemplo, ejecuto myscript.sh y automáticamente inicia una sesión de screen, ejecuta un comando y luego se desconecta.

Respuestas (5)

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

Esto es fácil:

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

Para ejecutar un solo comando en pantalla y separar, puede probar:

screen -dm sleep 10

Para ejecutar varios comandos, pruebe:

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

Tenga en cuenta que cuando un programa termina, screen (por defecto) mata la ventana que lo contenía.

Si no quiere que su sesión se mate después de que el script haya terminado, añada exec sh al final, por ejemplo

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

Para listar todas sus sesiones, pruebe:

screen -list

Relacionado: Iniciar pantalla Unix, Ejecutar comando, Desligar .

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

Para iniciar una nueva sesión en segundo plano con el nombre ‘sleepy’

screen -S sleepy -dm sleep 60

Para matar la sesión ‘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

me paso cuando presione control c (sig int) para salir de mi programa. sale de todos los bash. asi que encontre esto para atrapar SIGINT. y prevenir la salida del ultimo bash. (hay que teclear exit para salir)

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"

Encuentro útil usar cron para ejecutar programas nodejs en el arranque. y para ejecutar la pantalla en el arranque. en cron hay una sintaxis de eventos especiales @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"