Erro de kernel do notebook Jupyter devido ao arquivo não encontrado /run/user/*/jupyter

Erro de kernel do notebook Jupyter devido ao arquivo não encontrado /run/user/*/jupyter

Eu executo um serviço de notebook jupyter 4.4.0 (jupyter notebook --no-browser --port 8889) em um servidor fedora 27, que acesso remotamente por meio de um navegador. Depois de algumas horas de uso do serviço sem problemas, recebo um 'Erro de kernel'. Nas primeiras horas, consigo iniciar novos notebooks sem erros. No entanto, depois de um certo tempo, recebo a mensagem de erro abaixo. Isso me diz claramente que o erro do kernel é devido à falta do arquivo '/run/user/1001/jupyter/kernel-869f88b2-0895-40fb-b759-c518a1686484.json'.

Após uma investigação mais aprofundada, percebi que o arquivo está faltando porque todo o diretório jupyter está faltando em/run/user/1001. O diretório jupyter parece ter sido criado quando eu inicio o serviço pela primeira vez e parece ser excluído automaticamente após algum tempo.

Dias de pesquisa indicaram que o problema provavelmente é resultado de inatividade, o que faz com que o sistema operacional ou o serviço jupyter exclua o diretório /run/user/1001/jupyter.

Até agora não consegui descobrir exatamente o que está excluindo o diretório /run/user/1001/jupyter ou como impedir que isso aconteça. Você sabe como isso poderia ser resolvido?

Mensagem de erro

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'

Obrigado

Responder1

Eu corrijo esse problema definindo a variável JUPYTER_RUNTIME_DIR. O Jupyter armazena arquivos de tempo de execução em $XDG_RUNTIME_DIR/jupyter por padrão. A configuração de JUPYTER_RUNTIME_DIR substituirá esse comportamento. Você pode configurá-lo para algum diretório que não será limpo automaticamente para evitar esse erro.

Isso é o que eu faço antes de iniciar o Jupyter:

export JUPYTER_RUNTIME_DIR="path_to_my_home_directory/.jupyter_runtime"

E o problema está resolvido!

Mais alguns detalhes que encontro:

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

informação relacionada