質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • Ruby on Rails

    7235questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Resqueのサービス停止をsystemctlでやると、ジョブ(子プロセス)が止まってしまう

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 855

IPU

score 220

やりたいこと

1. Resqueのサービス停止時に子プロセスで動いているジョブが終了するまで待ってから、サービスを止めたい。
2. サービス起動停止をsystemctlでやりたい。

困っていること

1は出来たのですが、1で作ったシェルをsystemctlから呼びだすと何故か子プロセスを終了するまで待たず、
止められてしまう。

 bin/resque.sh

#!/bin/bash

FILE_PATH="$0"
ACTION="$1"

RUN_PATH=`echo ${FILE_PATH} | sed -e 's%/bin/resque.sh%%g'`

cd ${RUN_PATH}

PWD_CHECK=`pwd`
if [ ${PWD_CHECK} != ${RUN_PATH} ]; then
  echo "Moving directory failed."
  exit 1
fi

export RAILS_ROOT="${RUN_PATH}"

if [ $1 = "start" ]; then
  QUEUE=* rake resque:work >> "${RUN_PATH}/log/resque_worker.log" 2>&1 &
  pid=$!
  echo "${pid}" > "${RUN_PATH}/tmp/pids/resque_worker.pid"
fi

if [ $1 = "stop" ]; then
  pid=`cat "${RUN_PATH}/tmp/pids/resque_worker.pid"`
  kill -s 3 "${pid}"
  rm -rf "${RUN_PATH}/tmp/pids/resque_worker.pid"
fi

exit 0

 /etc/systemd/system/resque.service

[Unit]
Description = resque service daemon
After=redis.service

[Service]
PIDFile=/etc/rails/tmp/pids/resque_worker.pid
WorkingDirectory=/etc/rails
ExecStart=/etc/rails/bin/resque.sh start
ExecStop=/etc/rails/bin/resque.sh stop
Type=forking
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

+1

解決しました。
昨日全然思い当らなかったのに、今日あっさり原因わかってしまった。

結論から言うと、systemdのkillmodeの設定が原因でした。
Systemd メモ書き
systemdを本番運用してわかったこと
この2つのページを見て、判明。

修正後のserviceファイルは、以下。

[Unit]
Description = resque service daemon
After=redis.service

[Service]
PIDFile=/etc/rails/tmp/pids/resque_worker.pid
WorkingDirectory=/etc/rails
ExecStart=/etc/rails/bin/resque.sh start
ExecStop=/etc/rails/bin/resque.sh stop
KillMode=none
Type=forking
Restart=on-failure

[Install]
WantedBy=multi-user.target

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    7235questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。