Siantraはバックグラウンドモードがありませんか?Webrickソースのserver.rbのバックグラウンドプロセスの実現は簡潔である


WindowsにSinatraと書かれたコードがUnixに伝わり、
chmod+xの後、スクリプトエラーを直接実行します.
: bad interpreter: No such file or directory
これは、このファイルがDOS形式で編集されているため、Unixは認識していません.変換する必要があります.
Viで開くと、
:set ff?Dosかどうかを調べてみると、
set ff=unixをUnixに変換し、
そしてもう一度実行してみます.
Sinatraはどのように後でモードを起動するかを見つけていません.これは考慮する範囲内ではないかもしれません.
次のWebrickのデーモン・プロセス・コードを追加します.
最後にもう一つ付け加えます.
Daemon.スタートでOKです.
ps-ajx見てみましょう:
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1 15755 15754 15754 ?           -1 S        0   0:00/usr/local/bin/ruby ./server.rb
一般的なデーモン:
  class Daemon
    def Daemon.start
      exit!(0) if fork
      Process::setsid
      exit!(0) if fork
      Dir::chdir("/")
      File::umask(0)
      STDIN.reopen("/dev/null")
      STDOUT.reopen("/dev/null", "w")
      STDERR.reopen("/dev/null", "w")
      yield if block_given?
    end
  end

使うときに写せばいいのに、ハハハハ.
しかし、デーモンプロセスの実現原理を理解するには、Javaコードを書くだけの学生たちが『UNIX環境プログラミング』:)を見てください.
=====================
#!/usr/local/bin/ruby
require 'rubygems'
require 'sinatra/base'
require 'rack'
require 'open3'

$build_sh = File.join("/home/admin/taiji/src/taiji/src/task","build.rb")

class TaijiBuilderServer < Sinatra::Base
	get '/taiji' do
		"{stat:'Running'}"
	end

	get '/taiji/build' do
		if (params[:project_name] && params[:svn] && params[:project_id]) != nil then
			#          SVN       、     ,   Sinatra      !
			Open3.popen3 %Q{ruby #{$build_sh} #{params[:project_name]} #{params[:svn]} #{params[:project_id]}}
			"{stat:'OK',params:'#{Rack::Request.new(env).params.inspect}',ts:'#{Time.now().to_s}',cmd:'ruby #{$build_sh} #{params[:project_name]} #{params[:svn]} #{params[:project_id]}'}"
		else
			"{stat:'Params Error'}"
		end
	end
end

class Daemon
    def Daemon.start
      exit!(0) if fork
      Process::setsid
      exit!(0) if fork
      Dir::chdir("/")
      File::umask(0)
      STDIN.reopen("/dev/null")
      #         a(  )         ,w       
      #  Sinatra    
      STDOUT.reopen("/home/admin/taiji/logs/build_stdout.log", "a+")
      #  Error  
      STDERR.reopen("/home/admin/taiji/logs/build_stdout.log", "a+")
      yield if block_given?
    end
end

#           Sinatra  
Daemon.start{TaijiBuilderServer.run! :host => '10.2.226.20', :port => 9090}

以前のコードをめくると、Sinatraもこのように使用できることがわかりました.
Rack::Handler::Mongrel.run builder, :Port => 9292

そうなるとオリジナルのMongrelやThinなどのデーモンプロセスの実現が予想されますが、
小さな機能を実現するためにそんなに多くの時間を無駄に勉強する必要はありません.私は専門家になれません.そうするつもりはありません.