Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

174
Views
¿Cómo esperar a que se inicie un programa y luego ponerlo en segundo plano?

Tengo un programa para el que estoy escribiendo un script en /etc/init.d .

El problema es que el programa no se demoniza a sí mismo . Se tarda como 5 segundos en iniciarlo y, cuando se ha inicializado, imprime una cadena ("Iniciado correctamente") en la salida estándar.

Estoy buscando crear una secuencia de comandos que inicie el proceso, espere un momento a que aparezca la cadena y luego continúe con la secuencia de comandos, lo que indica falla o éxito (se encontró la cadena).

Obviamente esto no funciona como yo quiero.

 daemon $PROGRAM &

Bastante

 (./proc > some_output) & poll_output_for "Started OK" 10 secs or die
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Creo que podría usar expect para hacer algo como esto: consulte http://expect.sourceforge.net/ o http://en.wikipedia.org/wiki/Expect . Esto está en repositorios para muchas distribuciones, por ejemplo, en Ubuntu puede apt-get install expect .

Es un script para simular tu daemon:

 #/usr/bin/env /bin/bash # daemon.sh sleep 2 echo Started OK while :; do sleep 1; echo '.' >> daemon.log; done

... y aquí hay un script de expectativa que espera la salida y luego sale:

 #!/usr/bin/env /usr/bin/expect spawn -ignore SIGHUP ./daemon.sh expect "Started OK"

Expect no regresa hasta que llega la notificación "Comenzó correctamente". Cuando se cierra, el daemon obtiene un SIGHUP , pero lo ignoramos para que continúe ejecutándose. Si inspecciona el archivo de registro ( watch cat daemon.log ), el demonio debería estar funcionando.

No creo que sea demasiado difícil esperar que devuelva un código de error apropiado; eche un vistazo a la página de manual para obtener más información.

over 4 years ago · Santiago Trujillo Report

0

Si te entiendo, hay un programa que tarda unos 5 segundos en iniciarse, pero se ejecuta en segundo plano. Debe esperar a que se inicie este programa, y este programa seguirá imprimiendo "Iniciado correctamente".

Si este programa se inicia, se ejecuta en segundo plano, pero aún está conectado a la consola, por lo que puede escribir en la consola, es posible que pueda hacer algo como esto:

 $prog | tee $prog_out_file while true do sleep 2 grep -q "Started Ok" $prog_out_file && break done # Continue here...

La idea es seguir repitiendo hasta que veas "Started Ok" impreso en la salida redirigida.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!