Ubuntu-Ruby Daemonスクリプトは2つのプロセスを作成します-shとruby-PIDファイルはrubyではなくshを指します


2

デーモンとして実行しているルビープロセスのPIDファイルが間違ったPIDを取得しています。実行/etc/init.d/sinatra startすると2つのプロセス- shとが作成rubyされ、PIDファイルで終わるPIDはshプロセスのPIDになります。これは、次に/etc/init.d/sinatra stopまたはを実行すると/etc/init.d/sinatra restart、shを強制終了し、rubyプロセスを実行したままにすることを意味します。

私は、a)スクリプトが2つのプロセス(shとrubyだけでなく、rubyだけでなく)を起動する理由、およびb)単にrubyを起動するように修正する方法を知りたいのですが?

セットアップの詳細:

デーモンとして実行されているubuntuサーバー上に小さなSinatraサーバーがセットアップされています。自動的にサーバの起動時に名前のスクリプトを実行するように設定されているsinatra中で/etc/init.dそれが制御スクリプト起動control.rbし、サーバーを起動するルビーデーモンコマンドを実行します。スクリプトは、「sinatrauser」アカウントで実行されます。このアカウントには、スクリプトに必要なディレクトリへのアクセス許可があります。

/etc/init.d/sinatraの内容

#!/bin/bash
# sinatra      Startup script for Sinatra server.

sudo -u sinatrauser ruby /var/www/sinatra/control.rb $1
RETVAL=$?

exit $RETVAL

このスクリプトをインストールするには、単にコピーして/etc/init.d/実行しました sudo update-rc.d sinatra defaults

/var/www/sinatra/control.rbの内容

require 'rubygems'
require 'daemons'

pwd = Dir.pwd
Daemons.run_proc('sinatraserver.rb', {:dir_mode => :normal, :dir => "/opt/pids/sinatra"}) do
  Dir.chdir(pwd)
  exec 'ruby /var/www/sinatra/sintraserver.rb >> /var/log/sinatra/sinatraOutput.log 2>&1'
end

ps -Aからの出力の一部

6967 ?         00:00:00 apache2
10181 ?        00:00:00 sh       <--- PID file gets this PID
10182 ?        00:00:02 ruby     <--- Actual ruby process running Sinatra
12172 ?        00:00:00 sshd

PIDファイルはで作成され/opt/pids/sinatra/sinatraserver.rb.pid、常にshインスタンスのPIDが含まれます。これは、常にrubyプロセスのPIDよりも1つ小さくなります

編集:mickeのソリューションを試しましたが、見ている動作には影響がありませんでした。

これはからの出力ですps -A f。この出力は、使用するsudo -u sinatrauser ...su sinatrauser -c ...、/ etc / init.dのサービス開始スクリプトで同じに見えます。

1146 ?        S      0:00 sh -c ruby /var/www/sinatra/sinatraserver.rb >> /var/log/sinatra/sinatraOutput.log 2>&1
1147 ?        S      0:00  \_ ruby /var/www/sinatra/sinatraserver.rb

回答:



1

最初のプロセスは、rubyを起動するsudoです。で確認してくださいps -A f。sudo行を変更してコマンドを実行します。

su sinatrauser -c "ruby /var/www/sinatra/control.rb $1"

編集:私はsuがスクリプトで次のようにきれいに見えると思う:

    su - someuser <<CHBACK
    ls $HOME // do stuff
    echo "do more stuff as $USER"
    CHBACK
    echo "Now I'm $USER again"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.