/run/user/*/jupyter 파일을 찾을 수 없어서 Jupyter 노트북 커널 오류가 발생했습니다.

/run/user/*/jupyter 파일을 찾을 수 없어서 Jupyter 노트북 커널 오류가 발생했습니다.

나는 브라우저를 통해 원격으로 액세스하는 fedora 27 서버에서 jupyter 4.4.0 노트북 서비스(jupyter 노트북 --no-browser --port 8889)를 실행합니다. 문제 없이 서비스를 몇 시간 사용한 후 '커널 오류'가 발생합니다. 처음 몇 시간 내에 오류 없이 새 노트북을 시작할 수 있습니다. 그러나 일정 시간이 지나면 아래와 같은 오류 메시지가 나타납니다. 커널 오류는 '/run/user/1001/jupyter/kernel-869f88b2-0895-40fb-b759-c518a1686484.json' 파일 누락으로 인해 발생했음을 분명히 알려줍니다.

추가 조사 결과 /run/user/1001에 전체 jupyter 디렉터리가 없기 때문에 파일이 누락된 것으로 나타났습니다. jupyter 디렉터리는 서비스를 처음 시작할 때 생성된 후 일정 시간이 지나면 자동으로 삭제되는 것 같습니다.

검색 결과에 따르면 이 문제는 비활성으로 인해 OS 또는 jupyter 서비스가 /run/user/1001/jupyter 디렉터리를 삭제한 결과일 가능성이 높습니다.

지금까지 나는 /run/user/1001/jupyter 디렉토리를 삭제하는 것이 무엇인지, 또는 그러한 일이 발생하지 않도록 하는 방법을 정확히 파악할 수 없었습니다. 이 문제가 어떻게 해결될 수 있는지 아시나요?

에러 메시지

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'

감사해요

답변1

JUPYTER_RUNTIME_DIR 변수를 설정하여 이 문제를 해결했습니다. Jupyter는 기본적으로 $XDG_RUNTIME_DIR/jupyter에 런타임 파일을 저장합니다. JUPYTER_RUNTIME_DIR을 설정하면 이 동작이 무시됩니다. 이 오류를 방지하기 위해 자동으로 정리되지 않는 일부 디렉터리로 설정할 수 있습니다.

Jupyter를 시작하기 전에 내가 하는 일은 다음과 같습니다.

export JUPYTER_RUNTIME_DIR="path_to_my_home_directory/.jupyter_runtime"

그리고 문제가 해결되었습니다!

내가 찾은 몇 가지 자세한 내용은 다음과 같습니다.

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

관련 정보