Rails初心者エンジニアです。
WebアプリのプロトタイプをAWS上にデプロイ・運用していく予定で、本番環境の構築を進めております。
###実現したいこと
サーバー自動復旧の準備として、Amazon Linux2上で、アプリサーバー(Unicorn)の自動起動の設定を行いたい
###実施内容
0. systemdを使ってunicornを起動するユニットファイル(/etc/systemd/system/unicorn.service)を作成し
0. 設定内容を反映 sudo systemctl daemon-reload
0. 確認のため手動でsystemctlで起動 sudo systemctl start unicorn.service
unicorn.serviceファイルの内容
[Unit] Description=The unicorn process After=network.target remote-fs.target nss-lookup.target Before=nginx.service [Service] User=myname WorkingDirectory=/var/www/rails/myapp SyslogIdentifier=unicorn Type=simple Restart=on-failure Environment=RAILS_ENV=production Environment=UNICORN_CONF=/var/www/rails/myapp/config/unicorn.conf.rb Environment=BUNDLE_GEMFILE=/var/www/rails/myapp/Gemfile EnvironmentFile=/etc/environment ExecStart=/bin/bash -l -c 'bundle exec unicorn_rails -c ${UNICORN_CONF} -E ${RAILS_ENV} -D' ExecStop=/usr/bin/kill -QUIT $MAINPID ExecReload=/usr/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target
参考にしたサイト:
Amazon Linux 2 で unicorn を systemd を使って立ち上げる
###発生事象
Unicronが起動せず、ログは以下の通りとなっております。
lang
1● unicorn.service - The unicorn process 2 Loaded: loaded (/etc/systemd/system/unicorn.service; disabled; vendor preset: disabled) 3 Active: failed (Result: start-limit) since 木 2020-11-19 22:03:24 JST; 1h 22min ago 4 Process: 29782 ExecStop=/usr/bin/kill -QUIT $MAINPID (code=exited, status=1/FAILURE) 5 Process: 29382 ExecStart=/bin/bash -l -c bundle exec unicorn_rails -c ${UNICORN_CONF} -E ${RAILS_ENV} -D (code=exited, status=0/SUCCESS) 6 Main PID: 29382 (code=exited, status=0/SUCCESS) 7 811月 19 22:03:24 xxx.compute.internal systemd[1]: Unit unicorn.service entered failed state. 911月 19 22:03:24 xxx.compute.internal systemd[1]: unicorn.service failed. 1011月 19 22:03:24 xxx.compute.internal systemd[1]: unicorn.service holdoff time over, scheduling restart. 1111月 19 22:03:24 xxx.compute.internal systemd[1]: start request repeated too quickly for unicorn.service 1211月 19 22:03:24 xxx.compute.internal systemd[1]: Failed to start The unicorn process. 1311月 19 22:03:24 xxx.compute.internal systemd[1]: Unit unicorn.service entered failed state. 1411月 19 22:03:24 xxx.compute.internal systemd[1]: unicorn.service failed.
###質問
ログから、ExecStop=/usr/bin/kill -QUIT $MAINPID (code=exited, status=1/FAILURE)で失敗していると思われますが、原因や対応方法が分からず困っております。
ご支援のほど、よろしくお願いいたします。
※前提として、systemdを使わず、ワーキングディレクトリで直接bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
コマンドを入力し、Unicornが起動することは確認済みです。
###試したこと#1
環境変数を使用せず、unicornの再起動は実施しないようunicorn.serviceファイルを以下の通り変更。
[Unit] Description=The unicorn process After=network.target remote-fs.target nss-lookup.target Before=nginx.service [Service] User=myname WorkingDirectory=/var/www/rails/myapp SyslogIdentifier=unicorn Type=simple ExecStart=/bin/bash -l -c 'bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -E production -D' ExecStop=/usr/bin/kill -QUIT $MAINPID ExecReload=/usr/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target
実行したところ、Unicornは起動せず、ログは以下の通り。
lang
1● unicorn.service - The unicorn process 2 Loaded: loaded (/etc/systemd/system/unicorn.service; disabled; vendor preset: disabled) 3 Active: failed (Result: exit-code) since 金 2020-11-20 11:23:04 JST; 36s ago 4 Process: 6590 ExecStop=/usr/bin/kill -QUIT $MAINPID (code=exited, status=1/FAILURE) 5 Process: 6190 ExecStart=/bin/bash -l -c bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -E production -D (code=exited, status=0/SUCCESS) 6 Main PID: 6190 (code=exited, status=0/SUCCESS) 7 811月 20 11:23:03 xxx.compute.internal systemd[1]: Started The unicorn process. 911月 20 11:23:03 xxx.compute.internal systemd[1]: Starting The unicorn process... 1011月 20 11:23:04 xxx.compute.internal unicorn[6590]: kill: not enough arguments 1111月 20 11:23:04 xxx.compute.internal systemd[1]: unicorn.service: control process exited, code=exited status=1 1211月 20 11:23:04 xxx.compute.internal systemd[1]: Unit unicorn.service entered failed state. 1311月 20 11:23:04 xxx.compute.internal systemd[1]: unicorn.service failed.
unicorn.serviceのジャーナル。
(・・・中略・・・) 11月 20 10:44:15 xxx.compute.internal unicorn[5569]: kill: not enough arguments 11月 20 10:44:17 xxx.compute.internal unicorn[5972]: kill: not enough arguments 11月 20 11:23:04 xxx.compute.internal unicorn[6590]: kill: not enough arguments 11月 25 09:48:42 xxx.compute.internal unicorn[16521]: kill: not enough arguments
###試したこと#2
unicorn.serviceファイルにおいて、依存関係や、ExecStop、 ExecReloadを削除し、ExecStartのみのシンプルな内容で実行。
[Unit] Description=The unicorn process [Service] User=myname WorkingDirectory=/var/www/rails/myapp SyslogIdentifier=unicorn Type=simple ExecStart=/bin/bash -l -c 'bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -E production -D' [Install] WantedBy=multi-user.target
これまでと異なるログを得られたが、依然としてUnicronは起動せず、原因不明。
● unicorn.service - The unicorn process Loaded: loaded (/etc/systemd/system/unicorn.service; disabled; vendor preset: disabled) Active: inactive (dead) 11月 25 09:48:40 xxx.compute.internal systemd[1]: Started The unicorn process. 11月 25 09:48:40 xxx.compute.internal systemd[1]: Starting The unicorn process... 11月 25 09:48:42 xxx.compute.internal unicorn[16521]: kill: not enough arguments 11月 25 09:48:42 xxx.compute.internal systemd[1]: unicorn.service: control process exited, code=exited status=1 11月 25 09:48:42 xxx.compute.internal systemd[1]: Unit unicorn.service entered failed state. 11月 25 09:48:42 xxx.compute.internal systemd[1]: unicorn.service failed. 11月 25 10:04:26 xxx.compute.internal systemd[1]: Started The unicorn process. 11月 25 10:04:26 xxx.compute.internal systemd[1]: Starting The unicorn process... 11月 25 11:23:00 xxx.compute.internal systemd[1]: Started The unicorn process. 11月 25 11:23:00 xxx.compute.internal systemd[1]: Starting The unicorn process...
unicorn.logの内容は以下の通り。
I, [2020-11-25T09:48:41.677152 #16516] INFO -- : Refreshing Gem list I, [2020-11-25T09:48:42.436156 #16516] INFO -- : unlinking existing socket=/var/www/rails/myapp/tmp/sockets/.unicorn.sock I, [2020-11-25T09:48:42.436349 #16516] INFO -- : listening on addr=/var/www/rails/myapp/tmp/sockets/.unicorn.sock fd=9 I, [2020-11-25T09:48:42.469695 #16516] INFO -- : master process ready I, [2020-11-25T09:48:42.477058 #16520] INFO -- : worker=1 ready I, [2020-11-25T09:48:42.478356 #16519] INFO -- : worker=0 ready I, [2020-11-25T09:48:42.583104 #16516] INFO -- : reaped #<Process::Status: pid 16519 exit 0> worker=0 I, [2020-11-25T09:48:42.583221 #16516] INFO -- : reaped #<Process::Status: pid 16520 exit 0> worker=1 I, [2020-11-25T09:48:42.583295 #16516] INFO -- : master complete
###試したこと#3
ExecStartのパスを/bin/bashからワーキングディレクトリ(/var/www/rails/myapp)に変更して実行。
[Unit] Description=The unicorn process [Service] User=myname WorkingDirectory=/var/www/rails/myapp SyslogIdentifier=unicorn Type=simple ExecStart=/var/www/rails/myapp 'bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -E production -D' [Install] WantedBy=multi-user.target
権限エラー発生してしまう。
systemd[19988]: Failed at step EXEC spawning /var/www/rails/myapp: Permission denied
コマンドラインから、同ディレクトリ・同コマンドを入力してUnicornが起動することは確認済みにも関わらず、上記エラーが発生してしまう。
なお、同ディレクトリには実行権限が付与されていることも確認済みであり、エラー発生原因が不明。
drwxrwxr-x 15 myname myname 4096 11月 3 13:12 myapp
回答1件
あなたの回答
tips
プレビュー