How to run Jupyter Lab as systemd service
If you want to run your Jupyter Lab as a network service on any modern Linux distribution, you can install a systemd
service that runs Jupyter. First, you need to install jupyter lab
using
sudo pip3 install jupyterlab
In case you don’t have pip3
, use sudo apt -y install python3-pip
or the equivalent on your distribution.
Note that this script will run Jupyter without token authentication and without password and it will listen on any IP (--ip=0.0.0.0
) by default. Either change the command line flags or be aware of the security implications !
#!/bin/bash
# This script installs and enables/starts a systemd service
export NAME=Jupyter
# Create service file
cat >/etc/systemd/system/${NAME}.service <<EOF
[Unit]
Description=${NAME}
[Service]
Type=simple
ExecStart=/usr/bin/env jupyter lab --ip=0.0.0.0 --port 17256 --LabApp.token=''
WorkingDirectory=/home/uli/jupyter
User=uli
Group=uli
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
# Enable and start service
systemctl enable --now ${NAME}
You need to change the following entries in the script in order to make it work for you:
WorkingDirectory=/home/uli/jupyter
User=uli
Group=uli
Set the WorkingDirectory
to whatever directory you want Jupyter to run in. Note that anyone being able to access the webinterface will basically have full access to that directory!
Set User
and Group
to the user that should run. Note that running Jupyter as root is not allowed. In case you still want to do it, add the --allow-root
flag to the command line options.
Now run the script as root
to install the service:
sudo ./install-jupyter-service.sh
Now you can access Jupyter at http://[ip of the computer]:17256
.
Changing the configuration
In order to change the configuration, I recommend to edit /etc/systemd/systemd/Jupyter.service
(or /etc/systemd/systemd/${NAME}.service
if you changed export NAME=Jupyter
) directly. After that, run
sudo systemctl daemon-reload
sudo systemctl restart Jupyter
You can also change the installation script and re-run it, but you still need to run daemon-reload
and restart
.
Running multiple Jupyter instances
In order to run multiple instances, just run multiple copies of the installation script with different names. For example, use
export NAME=Jupyter-DeepLearning
Debugging Jupyter Lab output
If you have problems with Juypter Lab starting up, use
sudo systemctl status Jupyter
in order to view the status and
sudo journalctl -xfu Jupyter
to view all the logs.
Status output example:
● Jupyter.service - Jupyter
Loaded: loaded (/etc/systemd/system/Jupyter.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-06-11 03:44:28 CEST; 4s ago
Main PID: 48753 (jupyter-lab)
Tasks: 1 (limit: 14226)
Memory: 51.7M
CGroup: /system.slice/Jupyter.service
└─48753 /usr/bin/python3 /usr/local/bin/jupyter-lab --ip=0.0.0.0 --port 17256 --LabApp.token=
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.215 ServerApp] nbclassic | extension was successfully loaded.
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.216 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.8/dist-packages/jupyterlab
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.216 LabApp] JupyterLab application directory is /usr/local/share/jupyter/lab
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.219 ServerApp] jupyterlab | extension was successfully loaded.
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.220 ServerApp] Serving notebooks from local directory: /dev/shm
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.220 ServerApp] Jupyter Server 1.8.0 is running at:
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.220 ServerApp] http://uli-desktop:17256/lab
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.220 ServerApp] http://127.0.0.1:17256/lab
Jun 11 03:44:29 uli-desktop env[48753]: [I 2021-06-11 03:44:29.220 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
Jun 11 03:44:29 uli-desktop env[48753]: [W 2021-06-11 03:44:29.224 ServerApp] No web browser found: could not locate runnable browser.
Uninstalling the Jupyter Lab service
In order to just stop and disable autostart (but not uninstall) the jupyter lab service, use
sudo systemctl disable --now Jupyter
After that, you can just remove the service file in order to permanently uninstall the service:
sudo rm /etc/systemd/system/Jupyter.service
You can always reinstall using our installation script.
Note that if you have changed the export NAME=...
line, you need to replace Jupyter
by the value of Name