HowTo run Redmine as a Windows service (win32-service + taskill approach) » History » Revision 2
Revision 1 (Etienne Massip, 2012-06-14 19:02) → Revision 2/3 (Etienne Massip, 2012-06-14 23:36)
h1. HowTo run Redmine as a Windows service (@win32-service@ + @taskill@ approach) * @gem install win32-service@ * drop below Ruby code in a @service.rb@ file and update @REDMINE_DIR@ path to fit your Redmine installation * create the service, for example with @"sc":http://msdn.microsoft.com/en-us/library/cc990289.aspx @sc create redmine binPath="C:\Ruby193\bin\rubyw -C D:\redmine\ service.rb"@ where ??D:\redmine\?? is the path of the directory where the ??service.rb?? file is located and ??C:\Ruby193?? your Ruby installation path <pre><code class="ruby"> REDMINE_DIR = 'D:\redmine' LOG_FILE = "#{REDMINE_DIR}\\log\\service.log" begin require 'win32/daemon' include Win32 class RedmineService < Daemon def service_init File.open(LOG_FILE, 'a'){ |f| f.puts "Initializing service #{Time.now}" } @server_pid = Process.spawn 'ruby script/rails s -e production', :chdir => REDMINE_DIR, :err => [LOG_FILE, 'a'] end def service_main File.open(LOG_FILE, 'a'){ |f| f.puts "Service is running #{Time.now} with pid #{@server_pid}" } while running? sleep 10 end end def service_stop File.open(LOG_FILE, 'a'){ |f| f.puts "Stopping server thread #{Time.now}" } system "taskkill /PID #{@server_pid} /T /F" Process.waitall File.open(LOG_FILE, 'a'){ |f| f.puts "Service stopped #{Time.now}" } exit! end end RedmineService.mainloop rescue Exception => e File.open(LOG_FILE,'a+'){ |f| f.puts " ***Daemon failure #{Time.now} exception=#{e.inspect}\n#{e.backtrace.join($/)}" } raise end </code></pre>