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 fg
se 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-program
para 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 -r
puedes 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.
tmux
es 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=always
en 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..