3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

unicornの自動起動(ubuntu20.04でのsystemd)

Last updated at Posted at 2021-08-13

はじめに

unicornとnginxの連携、init.dではなく、systemdで自動起動させるのが今風らしいじゃないですか。早く言ってよね…。(とはいえ自動起動できればどっちでも良いと思います)
最初init.dでやったのがこちら↓

環境

Ubuntu20.04
rails6
unicorn
nginx

参考

Unitファイル[unicorn.service]の作成

/etc/systemd/system/にunicorn.serviceを作ります。
パーミッションは644にするのが流儀のようです。
chownは/etc/以下なのでsudoでroot:rootのままで大丈夫。

sh
sudo touch /etc/systemd/system/unicorn.service
chmod 644 /etc/systemd/system/unicorn.service

picoなどで編集

/etc/systemd/system/unicorn.service
[Unit]
Description=The unicorn process
Before=nginx.service
After=network.target remote-fs.target nss-lookup.target

[Service]
User=hoge #ここはrailsのWorkingディレクトリのユーザーで良い
WorkingDirectory=/home/hoge/rails/hoge #フルパスで
SyslogIdentifier=unicorn
PIDFile=/home/hoge/rails/hoge/tmp/unicorn.pid #超大事。フルパスで
Type=simple

Restart=on-failure

Environment=RAILS_ENV=production #適宜developmentなど
Environment=UNICORN_CONF=/home/hoge/rails/hoge/config/unicorn.rb #フルパスで

ExecStart=/bin/bash -l -c 'bundle exec unicorn_rails -c ${UNICORN_CONF} -E ${RAILS_ENV} -D'
ExecStop=/usr/bin/kill -QUIT $MAINPID
# The unicorn process is gracefully restarted with `kill -USR2 <PID>` along with the setting
# in the before_fork hook in config/unicorn.rb.
# ref: https://tachesimazzoca.github.io/wiki/rails3/unicorn.html
ExecReload=/usr/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

書式の確認

sh
sudo systemd-analyze verify /etc/systemd/system/unicorn.service

はまったところ

参考にしたところのUnitファイルにPIDFileの記述がありませんでした。
これがなくても書式チェックは正常。そして起動もします(すぐこけるけど)。
以下は必須

/etc/systemd/system/unicorn.service
[Service]
PIDFile=/home/hoge/rails/hoge/tmp/unicorn.pid #超大事。フルパスで

変数展開はEnvironmentの部分のみ

DRY原則に則って、極力無駄な記述は避けたいと思い、
WorkingDirectoryを変数W_DIRに入れて展開したいよね、とか考え、
以下のように記述してみましたがNGです。
Environmentは変数入れれるのになんでや…。

/etc/systemd/system/unicorn.service
##以下はダメな例ですのでコピペしないでね
[Service]
WorkingDirectory=W_DIR=/home/hoge/rails/hoge #変数W_DIRに代入
SyslogIdentifier=unicorn
PIDFile=${W_DIR}/tmp/unicorn.pid #NG
Type=simple

Restart=on-failure

Environment=RAILS_ENV=production #適宜developmentなど
Environment=UNICORN_CONF=${W_DIR}/config/unicorn.rb  #NG

ExecStart=/bin/bash -l -c 'bundle exec unicorn_rails -c ${UNICORN_CONF} -E ${RAILS_ENV} -D'

設定が完了したら以下.serviceは付けなくてもいいようです。

起動時に自動起動させたい場合は
sudo systemctl enable unicornは必須!

sh
sudo systemctl daemon-reload
sudo systemctl enable unicorn
sudo systemctl start unicorn
sudo systemctl status unicorn

systemctlに登録できたらserviceコマンドでもいけます。
shellではstart,stopが後ろに来るのでserviceコマンドの方が使えると思う。

sh
sudo service unicorn start
sudo service unicorn stop
sudo service unicorn status

psコマンドのおさらい

色々あったのでpsの使い方について補足。

参考

$ ps -ef | egrep 'PID|unicorn' | grep -v grep
#スレッド一覧は以下
$ ps -eLf | egrep 'PID|unicorn' | grep -v grep
3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?