みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Ubuntuでsystemdの使い方

Djangoを使ったPythonのWebアプリケーションをデプロイするのにgunicornを使います.この時gonicornを常時起動させる必要があり,systemdの出番となります.

gonicornをsystemdを使ってデプロイする方法はこちらに詳しく書いてありますが,備忘録を兼ねてまとめておきます.

環境

  • Ubuntu 15.14
  • systemd
  • gunicorn
  • django

用意するファイル

gunicorn.service

systemdのserviceタイプのunitを定義するファイルです.これを/etc/systemd/system以下に保存します.ExecStartは絶対パスで指定します.PIDFileは/run以下に自動で作成されるgunicornのPIDが含まれたファイルで,ここでは作成場所を指定しているだけです.

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
PIDFile=/run/gunicorn/pid
User=someuser
Group=someuser
WorkingDirectory=/home/someuser
ExecStart=/home/someuser/gunicorn/bin/gunicorn --pid /run/gunicorn/pid test:app
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

gunicorn.socket

これはgunicornがlistenするポートを指定するためのファイルで,これも/etc/systemd/system以下に保存します.ListenStreamのポート番号はnginxの設定ファイルのupstreamに合わせます.

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn/socket
ListenStream=0.0.0.0:9000
ListenStream=[::]:8000

[Install]
WantedBy=sockets.target

tmpfiles.d/gunicorn.conf

これは上述のPIDfileなどの一時ファイルを/run/gunicornに保存できるようにsystemdにこのディレクトリを指定した権限で作成してもらうための設定ファイルです./etc/tmpfiles.d以下に保存します.Ubuntuではnginxを実行するのはユーザwww-dataなので,これと同一にしておきます.

d /run/gunicorn 0755 www-data www-data -

以上の設定が完了したら,サービスを有効にします.

sudo systemctl enable gunicorn

これでgunicornがシステム起動時に自動で起動されます.

その他systemdの便利なコマンド

sudo journalctl -e

最新のログを表示します.コマンド一発でログが見れるので便利です.

systemctl status gunicorn.service

gunicorn.serviceの状態を取得します.

sudo service gunicorn-cdx start

gunicorn.serviceを開始します.start, stop, restartなどが使用できます.これはUbuntuで以前使われていたUpstreamを同じです.

これぐらいの知識があれば,とりあえずgunicornを使ってwebアプリケーションをデプロイできると思います.