前回の記事でJupyterサーバーを構築しましたが、使うたびにいちいちログインしてJupyterを起動するのは手間です。
そこで、EC2インスタンスを起動したら自動的にJupyterも立ち上がるように設定しようと思います。
昔やったときは、Linuxが起動するときに実行されるスクリプトである、
/etc/rc.local
ファイルに、以下のJupyterの起動コマンドを書き込んでいました。
su - ec2-user jupyter notebook &
ただ、最近はrc.localを使うのではなく、Jupyter Notebookをサービスとして動かすのがトレンドのようなので今回はその方法でやってみます。
この方法だと、systemctlコマンドで管理できるようになるので便利そうです。
サービスファイルの中身についてのマニュアルはこちらのようです。
参考: systemd.service
まず、whichコマンドでjupyterのフルパスを確認しておきます。
$ which jupyter
~/.pyenv/shims/jupyter
~ は /home/ec2-user なので、実際のフルパスは
/home/ec2-user/.pyenv/shims/jupyter
ですね。
続いて、ユニットファイルを作成します。
sudo vim /etc/systemd/system/jupyter.service
# 中身は以下の通り
[Unit]
Description=Jupyter Notebook
[Service]
ExecStart=/home/ec2-user/.pyenv/shims/jupyter notebook
Restart=always
User=ec2-user
Group=ec2-user
[Install]
WantedBy=multi-user.target
他のサイトを見てると、[Service]のところに、
Type=simple
と入れてる人も多いですが、simpleはデフォルトなので省略しても良さそうです。(ExecStartを指定して、TypeとBusNameをいずれも指定しない時のデフォルトがsimple)
ExecStartに先ほど確認したJupyterのフルパスを指定します。
UserとGroupは指定しないとrootになってしまうようなので、ec2-userを指定します。
Restart=always は何らかの理由でサービスが終了したときに自動的に再起動する設定です。
ファイルを保存して閉じたら、サービスとして認識されていることを確認します。
$ systemctl list-unit-files --type=service | grep jupyter
jupyter.service disabled
あとは、起動することを確認します。
$ sudo systemctl start jupyter
$ sudo systemctl status jupyter
この段階で、ブラウザからもアクセスして使えることを確認しておきましょう。
ここまで上手くいったら、あとは自動的に起動するように設定して完成です。
$ sudo systemctl enable jupyter
$ systemctl list-unit-files --type=service | grep jupyter
jupyter.service enabled