GNU/Linux >> Tutoriales Linux >  >> Linux

¿Manera simple de reiniciar procesos bloqueados?

Solución 1:

Buscaría daemontools (http://cr.yp.to/daemontools.html).

Supervise se creó exactamente con este propósito:iniciar procesos y observarlos, reiniciándolos inmediatamente si alguna vez terminan.

Todavía podría usar monit si necesita hacer algo más complicado que una simple verificación de "¿todavía se está ejecutando?", y si el proceso necesita reiniciarse, hágalo a través de supervisar.

Solución 2:

También puede usar /etc/inittab para reiniciar procesos muertos usando respawn acción.

Consulte la sección inittab en http://aplawrence.com/Unixart/startup.html

Solución 3:

Puede usar secuencias de comandos del controlador de eventos con Nagios si tiene eso en su lugar para reiniciar los servicios.

Si Varnish requiere permiso de root para iniciarse (los scripts init.d generalmente lo requieren), cambie "/etc/init.d/varnish start" a "sudo /etc/init.d/varnish start". Pero eso probablemente no sea suficiente, ya que probablemente no desee otorgar a cualquier usuario monit que se ejecute como privilegios totales de sudo nopasswd para todos los comandos y otorgar sudo a un script de shell sería básicamente igual de malo. Por lo tanto, deberá averiguar qué comandos en ese script de inicio necesitan sudo, otorgar privilegios de sudo a esos comandos en el archivo /etc/sudoers al usuario monit y, finalmente, editar ese script de inicio en consecuencia. ¿O tal vez en lugar de todo este barniz se puede ejecutar como usuario no root?

Finalmente, estoy seguro de que sabes esto, pero lo voy a decir de todos modos. Estás poniendo mucho esfuerzo en esto, espero que estés poniendo tanto esfuerzo en descubrir por qué Varnish se bloquea y en realidad lo está arreglando (o acosando a los desarrolladores para averiguar por qué) :-)

Actualizar:
Es posible que esto no sea tan limpio, pero una manera fácil de hacerlo como root podría ser configurar un script que verifique si el proceso está bien y, si no, lo inicia. Luego simplemente ejecute ese script cada dos minutos como un trabajo cron.

Solución 4:

Otro gran método tomado de StackOverflow:

until myserver; do
    echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
    sleep 1
done

Esto podría agregarse al crontab:

crontab -e

Luego agregue una regla para iniciar su secuencia de comandos de monitoreo:

@reboot /usr/local/bin/myservermonitor

O agregado como script en /etc/init.d

Consulte la respuesta de StackOverflow para obtener una explicación detallada de por qué este es un buen enfoque.


Linux
  1. [Linux]:7 cosas que aprenderá cuando comience a escribir un simple script de Shell

  2. ¿Manera confiable de encarcelar procesos secundarios usando `nsenter:`?

  3. ¿La forma "adecuada" de probar si un servicio se está ejecutando en un script?

  4. ¿La mejor manera de garantizar que un script se ejecute una vez por período?

  5. Manera de hacer que un script de Shell siempre se ejecute como raíz?

Una forma sencilla de enumerar enlaces simbólicos en Linux

Una forma sencilla de abrir un puerto en Ubuntu 21.10

Una forma sencilla de comprobar la versión de los controladores de NVIDIA en Linux

Una forma sencilla de entender el comando IOStat

¿Hay alguna forma de mostrar la notificación del script bash en Ubuntu?

¿Cuál es la forma más rápida de ejecutar un script?