I am starting jupyter notebook with supervisor.
This is my configuration file:
[program:jupyter-notebook]
directory=/opt/sailogy_dataanalysis
command=/opt/sailogy_dataanalysis/venv/bin/jupyter notebook
user=jupyter
group=jupyter
autostart=True
autorestart=True
stdout_logfile=/opt/sailogy_dataanalysis/logs/notebook_access.log
stderr_logfile=/opt/sailogy_dataanalysis/logs/notebook_error.log
redirect_stderr=True
environment = PATH="/opt/sailogy_dataanalysis/venv/bin",JUPYTER_CONFIG_DIR="/home/jupyter/.jupyter",JUPYTER_RUNTIME_DIR="/etc/jupyter",XDG_RUNTIME_DIR="/run/user/1002"
startsecs=10
stopwaitsecs=600
priority=998
It starts, but I see this warning inside the log file:
UserWarning: IPython parent '/root' is not a writable location, using a temp directory.
As soon as I try to create a new notebook or open an existing one I get the following stack trace error:
[E 14:59:36.440 NotebookApp] Unhandled error in API request
Traceback (most recent call last):
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/base/handlers.py", line 436, in wrapper
result = yield gen.maybe_future(method(self, _args, _kwargs))
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/tornado/gen.py", line 1015, in run
value = future.result()
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/tornado/concurrent.py", line 237, in result
raise_exc_info(self._exc_info)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/tornado/gen.py", line 285, in wrapper
yielded = next(result)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/handlers.py", line 126, in get
path=path, type=type, format=format, content=content,
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/filemanager.py", line 350, in get
model = self._notebook_model(path, content=content)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/filemanager.py", line 310, in _notebook_model
self.mark_trusted_cells(nb, path)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/manager.py", line 447, in mark_trusted_cells
trusted = self.notary.check_signature(nb)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 220, in check_signature
if self.db is None:
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 126, in _db_default
db = sqlite3.connect(self.db_file, kwargs)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 109, in _db_file_default
if not self.data_dir:
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 101, in _data_dir_default
return app.data_dir
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/jupyter_core/application.py", line 93, in _data_dir_default
ensure_dir_exists(d, mode=0o700)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/ipython_genutils/path.py", line 167, in ensure_dir_exists
os.makedirs(path, mode=mode)
File "/opt/sailogy_dataanalysis/venv/lib/python2.7/os.py", line 150, in makedirs
makedirs(head, mode)
File "/opt/sailogy_dataanalysis/venv/lib/python2.7/os.py", line 150, in makedirs
makedirs(head, mode)
File "/opt/sailogy_dataanalysis/venv/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
*OSError: [Errno 13] Permission denied: '/root/.local'
It works fine when in my supervisor config file I use
``
.....
user=root
``
but I wouldn't start my service as root.
Does anyone know how to fix it?
Thanks
Walter
You might want to make sure HOME is set correctly. It's also possible that you will have a better experience launching via a small shell script, to ensure a full shell environment is established, rather than launching jupyter directly
Thanks a lot @minrk !!!
I've just set the environment variable HOME in my supervisor config file and now everything works fine.
Cheers,
Walter
I encountered the same _issue_ and finally found that documentation of supervisord configuration mentions:
The user will be changed using setuid only. This does not start a login shell and does not change environment variables like USER or HOME
So environment variables has to be _fixed_ manually, for example:
[program:foo]
user=bar
environment=HOME=/home/bar
Most helpful comment
Thanks a lot @minrk !!!
I've just set the environment variable HOME in my supervisor config file and now everything works fine.
Cheers,
Walter