Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A systemd script for running a Jupyter notebook server.
# After Ubuntu 16.04, Systemd becomes the default.
# It is simpler than https://gist.github.com/Doowon/38910829898a6624ce4ed554f082c4dd
[Unit]
Description=Jupyter Notebook
[Service]
Type=simple
PIDFile=/run/jupyter.pid
ExecStart=/home/phil/Enthought/Canopy_64bit/User/bin/jupyter-notebook --config=/home/phil/.jupyter/jupyter_notebook_config.py
User=phil
Group=phil
WorkingDirectory=/home/phil/Notebooks/
Restart=always
RestartSec=10
#KillMode=mixed
[Install]
WantedBy=multi-user.target
@whophil

This comment has been minimized.

Copy link
Owner Author

@whophil whophil commented Aug 14, 2016

Following the instructions of https://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-1-practical-examples, place this file in:

/etc/systemd/system/jupyter.service

Then execute

sudo systemctl enable jupyter.service

Reload the systemd daemona and restart the service

sudo systemctl daemon-reload
sudo systemctl restart jupyter.service
@whophil

This comment has been minimized.

Copy link
Owner Author

@whophil whophil commented Aug 27, 2016

Ran into some problems with calling jupyter notebook

`'notebook' is not a Jupyter command`.

Switched to explicit jupyter-notebook call instead.

@DomHudson

This comment has been minimized.

Copy link

@DomHudson DomHudson commented Oct 24, 2017

Thanks!

@Kevintso

This comment has been minimized.

Copy link

@Kevintso Kevintso commented Dec 4, 2017

why occurs this error, with or without config.py
● jupyter.service
Loaded: loaded (/lib/systemd/system/jupyter.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Mon 2017-12-04 23:38:01 UTC; 3s ago
Process: 17830 ExecStart=/home/ubuntu/anaconda3/envs/tensorflow_p36/bin/jupyter-notebook (code=exited, status=200/CHDIR)
Main PID: 17830 (code=exited, status=200/CHDIR)

@archi18

This comment has been minimized.

Copy link

@archi18 archi18 commented Mar 14, 2018

Hi @Kevintso ,
From exit status (code=exited, status=200/CHDIR) , it seems that either you do not have specified working directory or user and group you have specified does not have right permission in that directory.
Working directory (WorkingDirectory=) must be present , and make sure it has the right permissions.

Hope this helps you.

@WesternGun

This comment has been minimized.

Copy link

@WesternGun WesternGun commented May 31, 2018

In my case I have a 203/EXEC error, and after checking this, I have found that I have to add /bin/bash -c before the whole command, so it becomes:

ExecStart=/bin/bash -c "/usr/bin/jupyter notebook --config=/home/westerngun/.jupyter/jupyter_notebook_config.py --debug > /another/programming/jupyter/notebook.log 2>&1"

(last part is for log, you can go without it)

I am with CentOS 7. After this change this service finally gets working. So maybe the OP lacks it?

@aeoleader

This comment has been minimized.

Copy link

@aeoleader aeoleader commented Nov 28, 2018

18.04 won't start the service. After executing `sudo systemctl restart jupyter.service', it gives me Exec format error.

@G-Guillard

This comment has been minimized.

Copy link

@G-Guillard G-Guillard commented Mar 21, 2019

If encountering the following errors :

 Main PID: 24251 (code=exited, status=1/FAILURE)

Mar 21 13:48:21 ip-172-31-26-72 systemd[1]: jupyter.service: Main process exited, code=exited, status=1/FAILURE
Mar 21 13:48:21 ip-172-31-26-72 systemd[1]: jupyter.service: Unit entered failed state.
Mar 21 13:48:21 ip-172-31-26-72 systemd[1]: jupyter.service: Failed with result 'exit-code'.

Check /var/log/syslog for a more verbose message. It may be that

ValueError: certfile "certs/mycert.pem" does not exist

Solution : use absolute paths in your config file.

@fef1312

This comment has been minimized.

Copy link

@fef1312 fef1312 commented Nov 29, 2019

I suggest putting the service file in /etc/systemd/system/, not /usr/lib/systemd/system/. The latter is only for system units installed from the distribution package manager, while the one in /etc is for user-defined ones. It will make no difference in terms of functionality, but prevent conflicts with any package that might happen to install a jupyter.service in the future. Reference: systemd.unit(5)

@whophil

This comment has been minimized.

Copy link
Owner Author

@whophil whophil commented Dec 19, 2019

Thanks @sandtler, that is a good point - I have updated the instructions in the first comment.

I suggest putting the service file in /etc/systemd/system/, not /usr/lib/systemd/system/. The latter is only for system units installed from the distribution package manager, while the one in /etc is for user-defined ones. It will make no difference in terms of functionality, but prevent conflicts with any package that might happen to install a jupyter.service in the future. Reference: systemd.unit(5)

@JamesCHub

This comment has been minimized.

Copy link

@JamesCHub JamesCHub commented Nov 11, 2020

If you need environment variables for Tensorflow GPU work, and .bashrc usually does the job for you, you need to somehow make those available to the Jupyter service, or else Notebooks that need the GPU won't be able to see it.

Not sure this is the best way, but it's the way I got it to work:

[Unit]
Description=Jupyter Notebook

[Service]
Type=simple
PIDFile=/run/jupyter.pid
# ------------------------------------
Environment="PATH=/usr/local/cuda-10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:/usr/local/cuda-10.1/lib64:usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
Environment="CUDA_HOME=/usr/local/cuda-10.1"
Environment="NUMBAPRO_NVVM=/usr/local/cuda-10.1/nvvm/lib64/libnvvm.so"
Environment="NUMBAPRO_LIBDEVICE=/usr/local/cuda-10.1/nvvm/libdevice/"

ExecStart=/home/phil/.local/bin/jupyter-notebook
User=phil
Group=phil
WorkingDirectory=/home/phil/z_Notebooks
Restart=always
RestartSec=10
#KillMode=mixed

[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment