¿Cómo mantienes este cobarde script bash ejecutándose en segundo plano las 24 horas del día, los 7 días de la semana?

¿Cómo mantienes este cobarde script bash ejecutándose en segundo plano las 24 horas del día, los 7 días de la semana?

Esto puede parecer un duplicado, pero escúchame primero.

Ejecuto un script de shell, que tiene una entrada estándar activa y, a veces, al inicio requiere alguna entrada. Necesito que se ejecute las 24 horas del día, los 7 días de la semana y es necesario reiniciarlo en caso de falla ingresando un comando o simplemente ingresando "y" si aparece el mensaje. Ya probé dos métodos: usar nohup y hacer clic en Ctrl+Z, escribir bg y ambos muestran el trabajo como detenido y no se está ejecutando. Sólo cuando lo ejecuto fgse activa. ¿Alguna pista de cómo solucionar esto?

PD: También lo intenté y scriptcommand &termina con "Detenido".

¿Tendría sentido configurarlo como un servicio systemd?

Respuesta1

Los programas que dependen de la entrada como usted describió deben iniciarse dentro de un multiplexor de terminal como tmux(https://en.wikipedia.org/wiki/Tmux) o screen(https://www.gnu.org/software/screen/). Piense en ello como una versión basada en texto de una ventana de terminal.

Úselo screen my-programpara comenzar my-program. Entonces tú puedesdespegardesde su consola de pantalla virtual usando la combinación de teclas Ctrl- A Ctrl- Dy regresará al shell donde comenzó, pero su programa continúa ejecutándose en segundo plano. Luego, screen -rpuedes volver a conectarte a la consola virtual.

La pantalla (y su programa) seguirán ejecutándose hasta que su programa salga o se reinicie el servidor.

tmuxes bastante similar, pero tiene más opciones y funciones, y utiliza diferentes atajos de teclado.

Respuesta2

Para que el script continúe ejecutándose en segundo plano, use nohup: nohup scriptcommand &. Idealmente, el script tendría la opción de no solicitar información. Si por alguna razón esa no es una opción,Esperarse puede utilizar para ingresar 'y'.

La creación de un servicio systemd para el script permitiría que el script se inicie al reiniciar el sistema. También puede usar Restart=alwaysen su archivo systemd para reiniciar el servicio si el servicio se cierra o se cierra, elLa documentación de systemd tiene más información..

información relacionada