Error del kernel del cuaderno Jupyter debido a que no se encontró el archivo /run/user/*/jupyter

Error del kernel del cuaderno Jupyter debido a que no se encontró el archivo /run/user/*/jupyter

Ejecuto un servicio de notebook jupyter 4.4.0 (jupyter notebook --no-browser --port 8889) en un servidor fedora 27, al que accedo de forma remota a través de un navegador. Después de algunas horas de usar el servicio sin ningún problema, aparece un "Error de kernel". En las primeras horas, puedo iniciar nuevos cuadernos sin errores. Sin embargo, después de cierto tiempo, aparece el mensaje de error que aparece a continuación. Me dice claramente que el error del kernel se debe a que falta el archivo '/run/user/1001/jupyter/kernel-869f88b2-0895-40fb-b759-c518a1686484.json'.

Al investigar más a fondo, noté que falta el archivo porque falta todo el directorio jupyter en /run/user/1001. El directorio jupyter parece crearse cuando inicio el servicio por primera vez y luego parece que se elimina automáticamente después de un tiempo.

Días de búsqueda han indicado que el problema probablemente se debe a la inactividad, lo que hace que el sistema operativo o el servicio jupyter eliminen el directorio /run/user/1001/jupyter.

Hasta ahora no he podido descubrir exactamente qué está eliminando el directorio /run/user/1001/jupyter o cómo evitar que eso suceda. ¿Sabes cómo se podría solucionar esto?

Mensaje de error

Traceback (most recent call last):
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/web.py", line 1469, in _execute
    result = yield result
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1015, in run
    value = future.result()
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "<string>", line 3, in raise_exc_info
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1021, in run
    yielded = self.gen.throw(*exc_info)
  File "/opt/anaconda3/lib/python3.6/site-packages/notebook/services/sessions/handlers.py", line 73, in post
    type=mtype))
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1015, in run
    value = future.result()
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "<string>", line 3, in raise_exc_info
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1021, in run
    yielded = self.gen.throw(*exc_info)
  File "/opt/anaconda3/lib/python3.6/site-packages/notebook/services/sessions/sessionmanager.py", line 79, in create_session
    kernel_id = yield self.start_kernel_for_session(session_id, path, name, type, kernel_name)
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1015, in run
    value = future.result()
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "<string>", line 3, in raise_exc_info
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1021, in run
    yielded = self.gen.throw(*exc_info)
  File "/opt/anaconda3/lib/python3.6/site-packages/notebook/services/sessions/sessionmanager.py", line 92, in start_kernel_for_session
    self.kernel_manager.start_kernel(path=kernel_path, kernel_name=kernel_name)
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1015, in run
    value = future.result()
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "<string>", line 3, in raise_exc_info
  File "/opt/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 285, in wrapper
    yielded = next(result)
  File "/opt/anaconda3/lib/python3.6/site-packages/notebook/services/kernels/kernelmanager.py", line 160, in start_kernel
    super(MappingKernelManager, self).start_kernel(**kwargs)
  File "/opt/anaconda3/lib/python3.6/site-packages/jupyter_client/multikernelmanager.py", line 110, in start_kernel
    km.start_kernel(**kwargs)
  File "/opt/anaconda3/lib/python3.6/site-packages/jupyter_client/manager.py", line 240, in start_kernel
    self.write_connection_file()
  File "/opt/anaconda3/lib/python3.6/site-packages/jupyter_client/connect.py", line 472, in write_connection_file
    kernel_name=self.kernel_name
  File "/opt/anaconda3/lib/python3.6/site-packages/jupyter_client/connect.py", line 137, in write_connection_file
    with open(fname, 'w') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/run/user/1001/jupyter/kernel-869f88b2-0895-40fb-b759-c518a1686484.json'

Gracias

Respuesta1

Soluciono este problema configurando la variable JUPYTER_RUNTIME_DIR. Jupyter almacena archivos de tiempo de ejecución en $XDG_RUNTIME_DIR/jupyter de forma predeterminada. Configurar JUPYTER_RUNTIME_DIR anulará este comportamiento. Puede configurarlo en algún directorio que no se limpie automáticamente para evitar este error.

Esto es lo que hago antes de iniciar jupyter:

export JUPYTER_RUNTIME_DIR="path_to_my_home_directory/.jupyter_runtime"

¡Y el problema está resuelto!

Algunos detalles más que encuentro:

https://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html#envvar-JUPYTER_RUNTIME_DIR

https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables

información relacionada