Launching Jupyter notebook server on startup
In this post, I show how to automatically run the Jupyter notebook server on an OSX machine on startup, without using extra terminal windows.
Background
Jupyter notebooks provide a useful interactive environment (think better alternative for console) for scripting languages like Python, Julia, Lua/torch, which has become a favourite tool of many data scientists for handling datasets that fit into the laptop’s memory. If you have not used it, try it next time you do data analysis or prototype an algorithm.The Pain
There is a slight technical difficulty, though. The way Jupyter works is you run a server process on your machine (or somewhere in the network), and then access it through a web client. I have noticed a popular pattern of usage in the local-server case: a user runs the command to start the server process in the terminal then keeps the terminal window open while she is using the notebook. This method has several flaws:- you need to run the process manually each time you need a notebook (after reboot);
- you have to remember the command line arguments;
- the process takes up a terminal window/tab, or, if you run it in the background, you can accidentally close the tab and your RAM state will be lost.
The Solution
If your perfectionist’s feelings are hurt by those nuisances above, my setup may remedy it. It uses launchd framework that starts, stops, and manages background processes.
First, create a property list file in your ~/Library/LaunchAgents directory:
~/Library/LaunchAgents/com.blippar.jupyter-ipython.plist
and put the following text there. This is a custom format, which is not quite XML (e.g. order of children nodes apparently matters). I highlighted red the paths and other variables you will have to change:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.blippar.jupyter-ipython</string>
<key>ProgramArguments</key>
<array>
<string>zsh</string>
<string>-c</string>
<string>source ~/.zshrc;workon py3;jupyter notebook --notebook-dir /Users/roman/jupyter-nb --no-browser</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/roman/Library/LaunchAgents/jupyter-notebook.stderr</string>
<key>StandardOutPath</key>
<string>/Users/roman/Library/LaunchAgents/jupyter-notebook.stdout</string>
</dict>
</plist>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.blippar.jupyter-ipython</string>
<key>ProgramArguments</key>
<array>
<string>zsh</string>
<string>-c</string>
<string>source ~/.zshrc;workon py3;jupyter notebook --notebook-dir /Users/roman/jupyter-nb --no-browser</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/roman/Library/LaunchAgents/jupyter-notebook.stderr</string>
<key>StandardOutPath</key>
<string>/Users/roman/Library/LaunchAgents/jupyter-notebook.stdout</string>
</dict>
</plist>
The most interesting part is the ProgramArguments entry. As it is impossible to specify several commands as an argument, I had to run a separate shell instance and pass the commands separated by semicolons. If you do not need to set the virtual environment (workon py3), you might get away without calling the shell, although I recommend always using virtualenv for python on a local machine. Also, I use zsh; replace it with your shell of choice.
To check if everything works, run
launchctl load com.blippar.jupyter-ipython
launchctl start com.blippar.jupyter-ipython
and open http://localhost:8888/tree in your browser. Hopefully, you see the list of available notebooks.
Linux users, you should be able to replicate this with systemd (although, chances are you already know that =).
14 March 2017 at 22:11
Great post! I just follow the same instructions. And now i am enable to automatically run the Jupyter notebook server on an OSX machine without using any extra terminal windows. Good work!
30 April 2018 at 09:00
Thanks for the post. Its helped to setup it up on my mac.
26 May 2018 at 09:18
laravel interview questions aem interview questions
salesforce interview questions
oops abab interview questions itil interview questions
informatica interview questions
extjs interview questions
11 December 2018 at 10:34
Nice blog
best android training center in Marathahalli
best android development institute in Marathahalli
android training institutes in Marathahalli
ios training in Marathahalli
android training in Marathahalli
mobile app development training in Marathahalli
16 November 2019 at 09:51
Thanks for posting such a Useful information .You Have done a great job.
Python Institute in Hyderabad
Python Course in Hyderabad
10 July 2020 at 20:25
Kudos for delivering such an informative post. Have understood a lot from this concept. Gonna follow your updates from now on.
Oracle Training in Chennai | Certification | Online Training Course | Oracle Training in Bangalore | Certification | Online Training Course | Oracle Training in Hyderabad | Certification | Online Training Course | Oracle Training in Online | Oracle Certification Online Training Course | Hadoop Training in Chennai | Certification | Big Data Online Training Course