9

I am trying to run a jupyter notebook in the background without printing anything to the console. I found this solution in a question for bash:

jupyter notebook &> /dev/null &

But I am running jupyter in a docker container and want it to start in the background via CMD. How can I do the same in sh?

Community
  • 1
  • 1
MrLoh
  • 426
  • 1
  • 5
  • 10
  • So far I don't know a way and the docs don't see to indicate that is possible by default. Your solution should work, though, adding this line on the CMD line in Docker. – Ivan Jan 19 '16 at 12:21
  • thanks @Ivan the problem is that docker runs CMD commands in sh, not in bash and it doesn't seem to have the same effect in sh. – MrLoh Jan 19 '16 at 13:23

2 Answers2

7

I got it to work using the setup from:
https://github.com/jupyter/docker-stacks/tree/master/minimal-notebook

the trick was to install tini and put the following code into a start-notebook.sh script:

#!/bin/bash
exec jupyter notebook &> /dev/null &

this is than added to the path with:
COPY start-notebook.sh /usr/local/bin/ and
RUN chmod +x /usr/local/bin/start-notebook.sh

Then I could set CMD ["start-notebook.sh"] to start up the container with jupyter running in the background on start.

MrLoh
  • 426
  • 1
  • 5
  • 10
  • Can you explain what does the `&> /dev/null &` do? especially the two `&` symbols? – Nick Aug 21 '16 at 02:22
  • It ensures that the logs are not printed to `stdout` but redirected into `dev/null` and that the terminal doesn't get blocked with Jupiter but that jupyter is just fired off as a background process. Just try it out. – MrLoh Aug 21 '16 at 11:26
  • the `&>` is a newer bash-ism, "functional as of Bash 4" [as per the docs](http://tldp.org/LDP/abs/html/io-redirection.html), which redirects _both_ stderr and stdout. Alternatively, and more traditionally: `jupyter notebook > /dev/null 2>&1` , or, preferably, `jupyter notebook >> /path/to/logfile.log 2>&1` (the last, trailing `&` just runs the entire command in the background). – michael Jan 23 '17 at 02:37
2

You can do that, executing the below command

jupyter notebook --allow-root &> /dev/null &

You might see the warning that jupyter command needs --allow-root option if you execute jupyter notebook command as a root in a docker container.

amenbo
  • 2,274
  • 2
  • 12
  • 23