GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Cómo evitar que el fichero .xsession-errors alcance un tamaño enorme

2 comentarios

Xorg iconEl fichero .xsession-errors es un fichero de log que utiliza el sistema de ventanas X para registrar todos los errores que se producen en el entorno gráfico de Linux. Dado que todos los entornos de escritorio, ya sea Gnome, KDE, Cinnamon, XFCE, LXDE, etc., y todos los gestores de ventanas más livianos que no llegan a constituir un entorno de escritorio como FVWM, IceWM o Window Maker utilizan el sistema de ventanas X, al final cualquier aplicación gráfica que ejecutemos en nuestro ordenador puede provocar que se escriban mensajes de error en el fichero .xsession-errors, por lo que éste puede crecer de forma descontrolada hasta alcanzar fácilmente un tamaño muy grande de decenas de GB o incluso cientos si la capacidad de nuestro disco lo permite.

Del mismo modo que este problema afecta a los distintos entornos de escritorio y gestores de ventanas basados en X Window (es decir, todos), todas las distribuciones de Linux, ya sea Ubuntu, Fedora, Debian o ArchLinux se pueden ver también afectadas.

Aunque existe un mecanismo de control en el fichero /etc/X11/Xsession que hace que el fichero se vacíe cada vez que arranca nuestro entorno gráfico si ha superado un determinado tamaño, si eres de los que como yo normalmente suspenden el ordenador en lugar de apagarlo cada vez que dejan de trabajar, puede darse el caso de que no reinicies tu máquina durante semanas o incluso meses, con lo cual el fichero .xsession-errors nunca se truncará y podrá llegar a alcanzar tamaños gigantescos. Y aunque sí que reinicies el sistema con frecuencia, también ocurre que algunas aplicaciones, ya sea por algún tipo de fallo o error o porque hacen un uso indebido del log de errores, comienzan a verter miles y miles de mensajes a .xsession-errors de forma descontrolada.


Error: Your Requested widget " ai_widget-6" is not in the widget list.
  • [do_widget_area above-nav-left]
    • [do_widget_area above-nav-right]
      • [do_widget_area footer-1]
        • [do_widget id="wpp-4"]
      • [do_widget_area footer-2]
        • [do_widget id="recent-posts-4"]
      • [do_widget_area footer-3]
        • [do_widget id="recent-comments-3"]
      • [do_widget_area footer-4]
        • [do_widget id="archives-4"]
      • [do_widget_area logo-bar]
        • [do_widget id="oxywidgetwpml-3"]
      • [do_widget_area menu-bar]
        • [do_widget id="search-3"]
      • [do_widget_area sidebar]
        • [do_widget id="search-4"]
        • [do_widget id="ai_widget-2"]
        • [do_widget id="categories-5"]
        • [do_widget id="ai_widget-3"]
        • [do_widget id="ai_widget-4"]
        • [do_widget id="ai_widget-5"]
      • [do_widget_area sub-footer-1]
        • [do_widget id="text-4"]
      • [do_widget_area sub-footer-2]
        • [do_widget_area sub-footer-3]
          • [do_widget_area sub-footer-4]
            • [do_widget_area upper-footer-1]
              • [do_widget id="search-2"]
              • [do_widget id="recent-posts-2"]
              • [do_widget id="recent-comments-2"]
              • [do_widget id="archives-2"]
              • [do_widget id="categories-2"]
              • [do_widget id="meta-2"]
            • [do_widget_area upper-footer-2]
              • [do_widget_area upper-footer-3]
                • [do_widget_area upper-footer-4]
                  • [do_widget_area widgets_for_shortcodes]
                    • [do_widget id="search-5"]
                    • [do_widget id="ai_widget-6"]
                  • [do_widget_area wp_inactive_widgets]
                    • [do_widget id="wpp-2"]
                    • [do_widget id="text-1"]
                    • [do_widget id="recent-posts-3"]
                    • [do_widget id="categories-3"]
                    • [do_widget id="archives-3"]
                    • [do_widget id="icl_lang_sel_widget-3"]

                  Normalmente el fichero .xsession-errors se guarda en tu directorio de usuario y el único inconveniente de esta situación es que se te llene tu carpeta personal. Pero si no has particionado adecuadamente tu disco y sólo tienes una partición para todo el sistema de ficheros raíz (/), el rápido crecimiento del fichero .xsession-errors puede hacer que tu ordenador directamente deje de funcionar y se caiga.

                  Lectura recomendada:
                    La importancia de particionar correctamente un disco en Linux

                  Vaciar el fichero .xsession-errors

                  Si ya te ha ocurrido que te has quedado sin espacio en disco y mediante el comando du -k /home | sort -n | tail -5 ya has podido determinar que es el fichero .xsession-errors el que más espacio ocupa, el primer paso para solucionarlo es vaciarlo por completo:

                  $ >~/.xsession-errors

                  Evitar que .xsession-errors crezca sin control

                  Una vez liberado el espacio, querremos que no se pueda volver a repetir esta situación. Para ello lo mejor es tratar de encontrar el origen del problema, es decir, saber qué proceso está escribiendo sin control en el log de errores y por qué. Para ello lo mejor es usar el comando fatrace tal y como indico en este otro artículo: Cómo saber en tiempo real qué procesos escriben en un fichero con fatrace.

                  Otra medida interesante a adoptar será añadir una tarea a nuestro cron para que periódicamente se compruebe el tamaño del fichero .xsession-errors, y si éste supera un determinado umbral, vaciarlo o truncarlo para que sólo se conserven las últimas líneas:

                  – Ejemplo 1: comprobar cada 15 minutos si el fichero tiene un tamaño superior a 5 GB y si es así vaciarlo:

                  */15      *       *       *       *       [ $(du -k .xsession-errors | awk '{ print $1 }') -gt 5000000 ] && >/home/$(whoami)/.xsession-errors

                  – Ejemplo 2: hacer la misma comprobación, pero en lugar de vaciar todo el log, conservar las últimas 10.000 líneas:

                  */15      *     *       *       *       [ $(du -k .xsession-errors | awk '{ print $1 }') -gt 5000000 ] && tail -10000 /home/$(whoami)/.xsession-errors > /home/$(whoami)/.xsession-errors

                  Deshabilitar toda escritura sobre el fichero .xsession-errors

                  Si lo que queremos es olvidarnos de este log porque en condiciones normales no nos interesará la información de depuración que ofrece, podemos redirigir a /dev/null todo lo que se escriba en él y así siempre mantendrá un tamaño de 0 bytes. Para ello podemos editar el fichero de configuración /etc/X11/Xsession del sistema X Window y localizar la siguiente línea:

                  ERRFILE=$HOME/.xsession-errors

                  La sustituiremos por:

                  ERRFILE=/dev/null

                  También podemos eliminar el fichero .xsession-errors y poner en su lugar un enlace simbólico a /dev/null y conseguiremos el mismo efecto:

                  $ rm .xsession-errors
                  $ ln -s /dev/null .xsession-errors

                  El problema es que cuando reiniciemos la sesión el enlace simbólico será sustituido de nuevo por un fichero regular y se comenzará de nuevo a llenar. Para evitarlo deberemos añadir las siguientes líneas al fichero .bashrc de nuestro directorio personal:

                  # Si el fichero .xsession-errors no es un enlace simbólico lo eliminamos y lo creamos
                  if [ ! -h $HOME/.xsession-errors ]; then
                   /bin/rm $HOME/.xsession-errors
                   ln -s /dev/null $HOME/.xsession-errors
                  fi

                  Por último, existe otra posibilidad y es establecer el atributo inmutable al fichero, lo cual hará que no se pueda escribir nada sobre él por parte de ningún usuario ni de ningún proceso. Esto puede causar algún comportamiento inesperado del sistema, por lo que debe realizarse con precaución:

                  $ sudo chattr +i .xsession-errors
                   

                  Sobre el autor

                  Daniel López Azaña
                  Arquitecto de soluciones Cloud AWS & Linux Sysadmin Freelance

                  Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, AWSi, DevOps, DevSecOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

                  DanielCómo evitar que el fichero .xsession-errors alcance un tamaño enorme

                  Artículos relacionados

                  2 comentarios

                  Unirte a la conversación
                  • Cristian - 28/09/2018 responder

                    Daniel, una pregunta el archivo xsession-errors deja solo los errores de la parte gráfica de todos los usuarios que tiene un login ala sistema o también deja los errores cuando entras por SSH ?

                  • Daniel - 28/09/2018 responder

                    Cuando entras normalmente por SSH no, porque no se ejecutan aplicaciones gráficas. Pero si accedes con el parámetro -X, se activa el X11 forwarding, el cual permite ejecutar aplicaciones gráficas del host remoto en el entorno gráfico de la máquina cliente a través del túnel cifrado que establece SSH. En ese caso, como la aplicación se ejecuta en el host remoto aunque la estés visualizando en tu ordenador local, sí es posible que se viertan errores en el fichero .xsession-errors, depende de la configuración.

                  Deja una respuesta

                  Tu dirección de correo electrónico no será publicada.