# Reiniciar un servicio en caso de caida

## simonbcn

Hola,

Uso transmission-daemon en un servidor pero, todavía no sé porqué razón, cada cierto tiempo se cae. Me gustaría saber si hay alguna manera de indicarle al script de arranque que monitorice la ejecución y, en caso de caída, lo reinicie.

Un saludo.

----------

## 2uncas

Hola

Yo tengo script para ver que ciertos servicios están en ejecución y en caso de caída arrancarlos, son scripts que he sacado de internet (ya no se de donde).

Este es para Apache:

 *Quote:*   

> 
> 
> #!/bin/bash
> 
> set -e
> ...

 

Luego pongo una tarea en el cron para que cada x minutos lance el scrip

Saludos,

----------

## simonbcn

Gracias, buscando en Google encontré está discusión que habla precisamente sobre implementar en rc la opción que monitorice los servicios y los re-arranque en caso de caída: http://dev.gentoo.org/~vapier/openrc/projects/openrc/ticket/120.html

En él hay dos scripts interesantes:

Este reinicia todos los servicios que han caído (si hay alguno).

```
for svc in $(rc-status --crashed); do

   rc-service $svc -- --nodeps restart

done
```

Este es más completo y solo reinicia los servicios que han caído de una lista que nosotros especificamos.

```
echo "Checking for crashed services:"

rc_monitor_restart="apache dovecot postfix postgres"

for svc in $(rc-status --crashed); do

    for chk in $rc_monitor_restart; do

        if [ "$chk" = "$svc" ]; then

            # We use --nodeps as a restart could stop critical services that depend on us

            rc-service $svc -- --nodeps restart

            continue 2

        fi

    done

    echo "  $svc crashed and requires a manual restart"

done
```

Ahora tengo que comprobar que cuando cae un servicio como Transmission o vsftpd, rc realmente lo detecta como caído o no. Pero para ello debo esperar a que falle y comprobarlo.

También he encontrado este programa: monit, que se usa, entre otras cosas, para monitorizar programas/servicios. ¿Alguien lo ha usado?

----------

## agdg

Cuando un servicio en ejecución pasa a crashed, es porque el sistema lo ha matado o por un bug del servicio que hizo que fallara. Lo más lógico es pensar que el sistema esta matando el servicio. Puesto que se trata de un programa p2p, es probable que el proceso este superando los limites de uso de "archivos" que el sistema tiene asignado al usuario. 

Pongo entre comillas la palabra archivo porque hay que recordar que en linux todo son archivos, desde el teclado hasta un socket. Y si por algo se caracterizan los programas de p2p es por abrir cientos de conexiones. Por lo que no es raro, que tu programa de p2p este superando los límites de uso impuestos por tu sistema en cuanto a la cantidad de "archivos" que puede abrir un proceso.

Todo esto debería quedar registrado en los logs, tanto del programa que uses como los de tu sistema. Aunque si no te apetece a buscar entre los logs, simplemente puedes probar el remedio y ver si se soluciona.

echo "usuario-que-corre-el-proceso   hard   nofile   2048" >> /etc/security/limits.conf

Con eso indicas que los procesos que corra el usuario indicado puedan abrir hasta 2048 "archivos". Si algún programa se pasa de los 2048, el kernel lo mata. Por cierto, el límite por defecto para cualquier usuario es de 1024.

----------

## gringo

 *Quote:*   

> También he encontrado este programa: monit, que se usa, entre otras cosas, para monitorizar programas/servicios. ¿Alguien lo ha usado?

 

si, yo lo uso bastante en sistemas con CentOS y va de maravilla. 

En gentoo nunca lo he probado pero seguro que funciona igual de bien.

saluetes

----------

## simonbcn

 *agdg wrote:*   

> echo "usuario-que-corre-el-proceso   hard   nofile   2048" >> /etc/security/limits.conf

 

Gracias, lo he puesto a 8192 porque hay 3 Transmission + vsftpd (para 3 usuarios) + etc... ejecutándose a la vez.

 *gringo wrote:*   

>  *Quote:*   También he encontrado este programa: monit, que se usa, entre otras cosas, para monitorizar programas/servicios. ¿Alguien lo ha usado? 
> 
> si, yo lo uso bastante en sistemas con CentOS y va de maravilla. 
> 
> En gentoo nunca lo he probado pero seguro que funciona igual de bien.

 

Estoy en ello, creo que ya he conseguido configurarlo (la verdad es que no es tan sencillo como parece) y he aprovechado para que monitorice también el servicio SSH, FTP y el espacio libre en el disco duro. Es un programa muy completo.

----------

## agdg

 *simonbcn wrote:*   

> Gracias, lo he puesto a 8192 porque hay 3 Transmission + vsftpd (para 3 usuarios) + etc... ejecutándose a la vez.

 

El limite no es al usuario en global, sino a los proceso que corre el usuario. Es decir, un limite de 1024 significa que el usuario puede correr "infinitos procesos" pero cada proceso solo puede abrir 1024 descriptores como máximo. Aunque obviamente la suma de los descriptores abiertos por todos los procesos pueden superar el limite impuesto.

Un ejemplo, con mi usuario 

```
agd@agd-desktop ~ $ ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 112294

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 4096

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

agd@agd-desktop ~ $ lsof -c gnome-panel -n | wc -l

160

agd@agd-desktop ~ $ lsof -c gnome-session -n | wc -l

126

agd@agd-desktop ~ $ lsof -c gnome -n | wc -l

885

agd@agd-desktop ~ $ lsof -c gnome-terminal -n | wc -l

145
```

El número máximo de descriptores es 1024 (open files (-n) 1024), sin embargo si sumas los cuatro procesos de gnome que he consultado, ya suman 1316 descriptores. Y eso es debido a que ese máximo no se aplica al usuario sino a los procesos  ejecutados por el usuario, es decir, cada proceso tiene un limite de 1024 descriptores.

Tras lo dicho, 8192 creo que es un limite muy grande. Probablemente con 2048 o 4096 tengas de sobra. En cualquier caso siempre puedes orientarte usando lsof para averiguar cuantos "archivos" tienen abierto tus procesos.

----------

## simonbcn

 *agdg wrote:*   

>  *simonbcn wrote:*   Gracias, lo he puesto a 8192 porque hay 3 Transmission + vsftpd (para 3 usuarios) + etc... ejecutándose a la vez. 
> 
> El limite no es al usuario en global, sino a los proceso que corre el usuario. Es decir, un limite de 1024 significa que el usuario puede correr "infinitos procesos" pero cada proceso solo puede abrir 1024 descriptores como máximo. Aunque obviamente la suma de los descriptores abiertos por todos los procesos pueden superar el limite impuesto.
> 
> ....
> ...

 

entendido, gracias otra vez. He reducido entonces a 2048.

----------

## opotonil

Yo tambien uso Transmission con el mismo problema desde que actualice a la ultima version de pruebas (2.42-r1), cada poco le daba por cascar. La solucion desinstalarlo y eliminar todo rastro para despues instalarlo otra vez, ha sido mano de santo.

Salu2.

PD: Siempre he usado Nagios ya que es el que uso en el curro y me he acostumbrado a el, pero la verdad que para casa se me queda grande. ¿Que tal esta Monit en comparacion? ¿Tiene soporte o algun plugin para IPMI?Last edited by opotonil on Sat Feb 25, 2012 12:59 pm; edited 1 time in total

----------

## simonbcn

 *opotonil wrote:*   

> Yo tambien uso Transmission con el mismo problema desde que actualice a la ultima version de pruebas (2.42-r1), cada poco le daba por cascar. La solucion desinstalarlo y eliminar todo rastro para despues instalarlo otra vez, ha sido mano de santo.

 

Yo lo he instalado desde los fuentes, no desde los repositorios de gentoo, así lo configuro a mi gusto y puedo instalar la última versión disponible. 

Por otro lado, supongo que era un problema de ficheros abiertos porque de los 3 Transmission que hay ejecutándose en mi servidor, el mio es el único que cascaba y es, con diferencia, el que más torrents tiene: en estos momentos 163.

Un saludo.

----------

## opotonil

No se si puede tener algo que ver, pero cuando instalas Transmission desde portage cuando termina la compilacion te informa de los siguiente:

 *Quote:*   

> 
> 
> elog "Since ÂµTP is enabled by default, ${PN} needs large kernel buffers for"
> 
> elog "the UDP socket. You can append following lines into /etc/sysctl.conf:"
> ...

 

Salu2.

----------

## simonbcn

Gracias por vuestras respuestas.

Estoy usando Monit (os lo recomiendo para monitorizar procesos, disco, etc...).

He aumentado el número de ficheros con "nofile 2048"

Y he actualizado Transmission a la versión 2.50

Ahora funciona sin problemas. 

Un saludo.

----------

## Inodoro_Pereyra

Cuantos threads hablando de torrents por todos lados ahora que megaupload no existe mas...

Salud!

----------

