No se han encontrado widgets en la barra lateral
script para reiniciar un proceso en linux si esta parado 2

En este artículo voy a explicar como crear un script en linux con el que podemos reiniciar o arrancar un proceso que se ha parado.

Esto es una solución cuando ya se ha dado el problema de que un proceso se para.

En mi caso he aplicado este script a una máquina donde está ejecutándose memcache, pero por alguna razón que todavía no he determinado, memcached se para, pero es muy importante que memcached esté siempre corriendo porque las sessiones de usuario se guardan en memcache, así como cierta información que tiene que estar cacheada.

Puedes usar la base de este script para adaptarlo al servicio que sea.

Crear el script para reiniciar el proceso

En una carpeta donde guardes todos los shell script crea el archivo check_proceso.sh

En este ejemplo voy a definir que el servicio que quiero reiniciar es memcached pero puede ser cualquier otro.

[code]

#!/bin/bash
RESTART="/etc/init.d/memcached restart"
PGREP="/usr/bin/pgrep"
MEMCACHED="memcached"
# buscamos que exista el proceso
$PGREP ${MEMCACHED}
# sino existe id de proceso y el comando anterior devuelve 0
if [ $? -ne 0 ]
then
# restablecemos memcached y enviamos un email
$RESTART | mail -s "Memcache Restart en bbdd4 `date "+%c"`" [email protected]
fi
[/code]

Configurar el script en un cron

Ahora hay que crear una tarea programada para que ejecute de manera constante el script, para ello lo metemos en el crontab.
El cron hay que configurarlo como root porque el script reinicia el proceso y necesita tener privilegios de root.

Ejecuta el siguiente comando
[code]
crontab -e
[/code]

Esto abrirá el editor de texto por defecto. Añade la tarea. En este caso vamos a definir que se ejecute cada 5 minutos.
[code]
*/5 * * * * /bin/sh /root/shell_scripts/check_proceso.sh
[/code]

Guarda los cambios y ya podrás salir.

Si tienes dudas o preguntas no dudes en dejar un comentario

11 comentarios en «script para reiniciar un proceso en linux si esta parado»
  1. Buenas tardes gracias por la info, es de utilidad
    Tengo un pequeno problema, espero que me puedan ayudar.
    Quiero utilizar crontab -e para ejecutar un proceso cada minuto, edito el archivo crontab a travez de la consola, su ubicacion como todos sabemos es /var/spool/cron/crontab/(documento Crontab)
    La linea quedaria asi: */1 * * * * home/(usuario)/Documents/(script).sh
    Y resulta que no se ejecuta, y el script ya lo he probado y funciona bien.
    Gracias por la atencion

  2. Buenas tardes, tengo virtualizado mi servicio web, pero a veces se detiene y verifico su estado en el servidor con el comando:
    virsh –all este me presenta las maquinas que estan corriendo en ese momento y encuentro que esta corriendo (running). lo unico que siempre tengo que hacer es:

    virsh destroy web y luego virsh start web.
    Es la unica manera que funciona nuevamente. Mi pregunta es si puedo crear un script que me reinicie ese servicio sin necesidad de ser manual, sobre todo los fines de semana?.
    Gracias y atento.

  3. Hola, para confirmar, dices que puede adaptarse a cualquier proceso. Se me para el ventilador/disipador de la cpu pasadas unas horas o en momentos en los que mi sistema requiere mucha memoria (no lo puedo confirmar pero lo parece) ¿Puedo usarlo para revivir el ventilador y que refrigere de nuevo mi chip?

  4. la verdad no me gusto porque se debe pasar el proceso a una variable, seria mejor si se pudiera colocar simplemente el nombre del programa que lo busque y si existe que lo reinicie y listo. Eso si seria mas practico.

  5. olá, tentei fazer o processo com outro serviço mas não deu certo. pode ajudar?
    segue abaixo o processo
    #!/bin/bash
    RESTART=»/etc/systemd/system/traccar.service restart»
    PGREP=»/usr/bin/pgrep»
    TRACCAR=»java»
    # buscamos que exista el proceso
    $PGREP ${TRACCAR}
    # sino existe id de proceso y el comando anterior devuelve 0
    if [ $? -ne 0 ]
    then
    # restablecemos memcached y enviamos un email
    $RESTART | mail -s «Traccar Restart en bbdd4 `date «+%c»`» [email protected]
    fi

  6. Hola buenas,
    Tenía la duda de como hacer para que en vez de reiniciar un solo proceso, se puedan reiniciar todo los procesos que hay, mediante una variable o de cualquier forma, mientras se puedan reiniciar todos los procesos.
    Saludos

  7. Buenas, tengo un inconveniente con el script.

    Tengo un servicio que se cae constante mente, la idea es que si esta abajo el script valide y luego lo inicie sin tener que entrar al servidor y subirlo manualmente.

    #Script to start Service
    #
    # !/bin/bash
    #
    ps -ef | grep java | grep -v grep > /dev/null
    if [ $? != 0 ]
    then

    fi
    /home/oracle/datos_FDS/bin./ejecutaRecibeFDSdesarrollo > ./ejecutaRecibeFDSdesarrollo.log &
    #

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *