Eu sugiro usar o supervisord . Estou usando o jupyterhub por meio do supervisord.
A Supervisord gera seu programa como ele é filho, e você pode configurá-lo para reiniciá-lo se ele morrer, assim você sempre terá o serviço funcionando. Tem algumas opções de configuração, mas é bastante simples. Você pode até ter uma interface http de onde você pode parar ou iniciar os programas que mantém.
Uma definição básica, em supervisord.conf , para o seu programa se pareceria com o seguinte.
[program:ipython_notebook]
command=/usr/local/bin/ipython notebook --ip 0.0.0.0 --port 8080
stderr_logfile = /var/log/supervisord/ipython_notebook-stderr.log
stdout_logfile = /var/log/supervisord/ipython_notebook-stdout.log
Systemd
Eu tentei fazer isso com o systemd também, e é isso que eu criei.
Crie o arquivo: /etc/systemd/system/ipython.service. O conteúdo do arquivo:
[Unit]
Description=IPython
After=network.target
[Service]
TimeoutStartSec=0
ExecStart=/usr/local/bin/ipython notebook --ip 0.0.0.0 --port 8080
[Install]
WantedBy=multi-user.target
Eu não verifiquei todos os parâmetros para o notebbok ipython, mas deve haver um que permita especificar sua casa. Se não é um parâmetro que certamente você poderia encontrá-lo no ptofile. Você também deve adicionar isso.
Então você precisa ativar o serviço:
systemctl enable /etc/systemd/system/ipython.service
e comece:
systemctl start ipython.service
Eu não tenho muita certeza, mas vendo que é o WantedBy multi-user.target, você deve ter um reinício do sistema, mas eu sou muito novo no systemd então eu posso estar errado :)