• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

159
Vistas
Llamar a Rscript desde el script de shell de Linux

¿Alguien puede sugerir cómo podría hacer que esto funcione ...

Tengo un script R que tarda varios minutos en ejecutarse y escribe unos cientos de líneas de salida. Quiero escribir un contenedor de script de shell alrededor de este script R que iniciará el script R en segundo plano, canalizará su salida a un archivo y comenzará a seguir la parte inferior de ese archivo. Si el usuario ingresa CTRL-C, quiero que elimine el script de Shell y el comando de cola, pero no el script R. Suena simple, ¿verdad?

He producido un ejemplo simplificado a continuación, pero no entiendo por qué esto no funciona. Cada vez que elimino el script de Shell, el script R también se elimina a pesar de que aparentemente se ejecuta en segundo plano. Intenté nohup, disown, etc. sin éxito.

ejemplo.R

 for(i in 1:1000){ Sys.sleep(1) print(i) }

envoltorio.sh

 #!/bin/bash Rscript example.R > logfile & tail -f logfile

¡Gracias por adelantado!

about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lo siguiente parece funcionar en mi máquina Ubuntu:

 #!/bin/bash setsid Rscript example.R > logfile.txt & tail -f logfile.txt

Estos son algunos de los procesos relevantes antes de enviar SIGINT a wrapper.sh :

 5361 pts/10 00:00:00 bash 6994 ? 00:00:02 update-notifier 8519 pts/4 00:00:00 wrapper.sh 8520 ? 00:00:00 R 8521 pts/4 00:00:00 tail

y después de Ctrl+C , puede ver que R aún se está ejecutando, pero wrapper.sh y tail han sido eliminados:

 5361 pts/10 00:00:00 bash 6994 ? 00:00:02 update-notifier 8520 ? 00:00:00 R

Aunque agregar su comando Rscript [...] con & lo enviará a un segundo plano, aún es parte del mismo grupo de procesos y, por lo tanto, también recibe SIGINT .


No estoy seguro de si fue su intención, pero dado que está llamando a tail -f , si no se interrumpe con Ctrl+c , su shell que ejecuta wrapper.sh continuará colgando incluso después de que se complete el proceso R. Si desea evitar esto, lo siguiente debería funcionar,

 #!/bin/bash setsid Rscript example.R > logfile.txt & tail --pid="$!" -f logfile.txt

donde "$!" es la identificación del proceso del último proceso en segundo plano ejecutado (la llamada Rscript [...] ).

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda