miércoles, 26 de diciembre de 2012

Ajustando los recursos con nice

... porque se nos acumulan los superpoderes

Buenos días, llegados a esta altura, tenemos grandes superpoderes corriendo simultáneamente en nuestro RaspberryPi, y aunque puede con todos, es mejor ir reservando recursos. Para esta tarea vamos a empezar con el comando "nice", veamos como se usa.

Como hay superpoderes más importantes que otros (en determinadas ocasiones) vamos a usar esta herramienta que nos permite indicar la prioridad del comando a ejecutar.
Supongamos que tenemos el transmission-daemon y el minidlna. Cuando vamos a ver una peli o una serie, necesitamos que minidlna corra al máximo y el transmission casi que podríamos cerrarlo. Para fijar estas prioridades necesitamos que esos procesos no arranquen con el sistema, así que borramos los enlaces a esos servicios que aparezcan en /etc/rc2.d/, por ejemplo:
rm /etc/rc2.d/S05minidlna
rm /etc/rc2.d/S01transmission-daemon
Y ahora en el /etc/rc.local añadimos:
screen -d -m -S transmission nice -n15 transmission-daemon -f -T -g /etc/transmission-daemon/
nice -n-19 /usr/bin/minidlna -f /etc/minidlna.conf -P /run/minidlna/minidlna.pid
Las prioridades van desde 19 para la más baja y -20 para el valor más alto, por eso con -n15 le damos una prioridad muy baja al transmission y con -n-19 le damos una muy alta al minidlna. El valor por defecto es 10.
Os recomiendo usar frecuentemente el nice con nuestro RaspberryPi, puede con todo, pero a lo mejor no puede con todo a la vez.

20 comentarios:

  1. mira en rc2.d no me aparece nada O_o

    y el rc.local esto


    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
    printf "My IP address is %s\n" "$_IP"
    fi

    ResponderEliminar
    Respuestas
    1. en /etc/rc2.d tiene que salirte algo si o si. En el archivo /etc/rc.local , las modificaciones van debajo de todo.

      Eliminar
    2. rc2.d es un directorio y no un archivo, por lo que supongo que quieres decir que borremos estos archivos. Creo que estamos muchos por aquí que nos ilustramos con los tutoriales pero al ser relativamente neófitos en linux nos perdemos en muchos pasos que no se explican o se dan por supuesto (Me las he visto y deseado con los permisos de los malditos directorios para montar algún que otro superpoder).

      Una vez eliminados ¿Se pueden recuperar o habrá que realizar una copia de estos "por si acaso"? ¿En que directorio podemos hacer la copia sin problema? ¿Suficiente con un .old al final en ese mismo directorio?

      Eliminar
    3. el contenido del directorio rc2.d son enlaces simbolicos a los scripts de /etc/init.d/ Si prefieres no borrarlos, muevelos fuera del rc2.d, a /root por ejemplo. Eso si, no los muevas todos, solo aquellos que quieras ajustar con nice.
      Tengo pendientes varios post con ayuda basica de linux, a ver si los termino.

      Eliminar
    4. Me gustaría darle prioridad tambien a samba... pero ni idea de como hacerlo (Ya... ya... mejor nfs pero no puedo escapar de windows y sus programas específicos para mi profesión)

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Screen es un comando para ejecutar con el entorno gráfico me imagino, para los que no arrancamos el entorno gráfico habría alguna otra manera de arrancarlo. Por otra parte he comprobado que no tengo: /run/minidlna/minidlna.pid

    ¿Me podríais echar una mano?

    Gracias.

    ResponderEliminar
    Respuestas
    1. screen es para uso en linea de comandos, para dejar procesos en segundo plano y retomarlos cuandon se quiera. Los .pid los crea el ejecutable cuando se ejecuta. Si ni lo tienes es porque o no esta en uso o porque esta en otra ruta, que normalmente se configura en el .conf del servicio en cuestion.

      Eliminar
    2. Muchas gracias, pues entonces tendré que mirar de instalármelo, porque juraría que lo probé y que no me lo encontró, y por eso asumí que iría por el tema de las X. ¿Sabes con que paquete se instala?. En cuanto al fichero .pid, toda la razón, después de mil horas configurando y jugando, tenía el proceso parado :P.

      De nuevo muchas gracias por todo.

      Eliminar
  4. Buenas, enhorabuena por el blog, me esta sirviendo muchisimo para las configuraciones de la Raspi. Con Nice tengo una duda que me está volviendo loco, lo puse ayer y ahora no me envia transmission el correo de cuando finaliza la descarga, porque puede ser??
    Gracias!!

    ResponderEliminar
    Respuestas
    1. seguro que lo unico que has cambiado es lo del nice? prueba primero quitar la parte del nice a ver si sigue sin enviar. El nice es un poco "agresivo" pero como mucho, retrasa la ejecución, no la cancela. Prueba a ver.

      Eliminar
    2. Si eso ha sido lo unico, quitar los 2 archivos de /etc/rc2.d/ y copiar las 2 lineas que indicas en /etc/rc.local que las he puesto justo antes del exit 0, con un salto de linea entre las 2 lineas y el exit. Aparte de esto, hay otra cosa que me llamo la atención, al reiniciar la raspi y volver a entrar a la pantalla del transmission desde el navegador, en el apartado de las estadisticas de descargas, las descargas totales se habian puesto a 0, como si estuviera recien instalado el transmision.

      De todas formas pruebo lo que me dices, vuelvo a copiar los 2 archivos a /etc/rc2.d/ borro las 2 lineas de nice y pongo a descargar algo a ver si me manda el correo al terminar, ya te cuento!

      Muchas gracias!!

      Eliminar
    3. Buenas de nuevo!

      despues de hacer esos cambios te comento. Lo que te decia de las descargas totales, ahora vuelvo a ver el total de gigas descargados por transmision desde que lo instale y si que me envia los correos!! :S y los cambios que hago son los de este post solo.

      Transmission en las 2 ocasiones corre como root

      Graciassss

      Eliminar
    4. me da a mi que te esta fallando una chorradilla. Si tocas las opciones del transmission, el settings.json tienes que asegurarte de tener el transmission-daemon apagado del todo (usa "ps aux" para asegurarte). Si no es así, por muchos cambios que hagas, nunca se aplicaran. Mira a ver si es eso.

      Eliminar
    5. Buenas, las chorradillas son las que me vuelven loco, hasta que se encuentran.... jajaja
      El settings.json es el mismo no? con las lineas de nice que sin ellas, o cambia de ubicacion? porque es que ni lo toco a la hora de hacer los cambios de nice y las cosas configurables desde la web siguen manteniendose igual en ambos casos.
      Puede ser que con el nice a 15 de transmission no le de para ejecutar el mutt??

      Eliminar
    6. pfffffff pssssss no se, no creo ¿no? No lo he probado con mutt, pero no creo que sea eso. El setings.json es el mismo con y sin nice, pero insisto: asegurate de tener el transmission completamente parado, antes de cambiarlo.

      Eliminar
    7. el setings.json es que ni lo toco asi que no debe de estar ahi el problema. El unico cambio que hago es añadir las 2 lineas que indicas arriba y borrar los 2 archivos que indicas, por eso me parece tan raro, porque no cambio nada que tenga que ver con la alerta de correo :S

      Eliminar
  5. Buenas tardes y gracias por tu blog, me está siendo de gran ayuda con mi nueva RaspberryPi (llevo tres días).
    He seguido todos los pasos que indicas, pero resulta que después de realizarlos y reiniciar, los demonios de transmission y minidlna no estan corriedo. Creía haber entendido que se ejecutarían al incluirlos en /etc/rc.local con la configuración correspondiente. Te ruego me confirmes si esto es normal. Si lo es, me podrías decir como automatizar el arranque de esos dos demonios?

    Gracias.

    ResponderEliminar
    Respuestas
    1. ejecuta:
      /etc/init.d/rc.local start
      si tiene algun fallo te debería salir ahí. Prueba y me cuentas.

      Eliminar