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://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables