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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

解決済

1回答

3385閲覧

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

IPU

総合スコア283

Ruby on Rails

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

2グッド

1クリップ

投稿2017/01/19 04:33

編集2017/01/19 05:40

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

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

bin/resque.sh

bash

1#!/bin/bash 2 3FILE_PATH="$0" 4ACTION="$1" 5 6RUN_PATH=`echo ${FILE_PATH} | sed -e 's%/bin/resque.sh%%g'` 7 8cd ${RUN_PATH} 9 10PWD_CHECK=`pwd` 11if [ ${PWD_CHECK} != ${RUN_PATH} ]; then 12 echo "Moving directory failed." 13 exit 1 14fi 15 16export RAILS_ROOT="${RUN_PATH}" 17 18if [ $1 = "start" ]; then 19 QUEUE=* rake resque:work >> "${RUN_PATH}/log/resque_worker.log" 2>&1 & 20 pid=$! 21 echo "${pid}" > "${RUN_PATH}/tmp/pids/resque_worker.pid" 22fi 23 24if [ $1 = "stop" ]; then 25 pid=`cat "${RUN_PATH}/tmp/pids/resque_worker.pid"` 26 kill -s 3 "${pid}" 27 rm -rf "${RUN_PATH}/tmp/pids/resque_worker.pid" 28fi 29 30exit 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
iyoda, Y.H.👍を押しています

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

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

結論から言うと、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

投稿2017/01/19 05:39

IPU

総合スコア283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問