  
<div id="snippet_212" class="snippet">
  <h2><a href="/snippets/212-How-to-create-a-daemon-process-using-Ruby-and-the-daemons-RubyGem" title="How to create a daemon process using Ruby and the daemons RubyGem - Ruby - ruby, daemons, daemon, process, background">How to create a daemon process using Ruby and the daemons RubyGem</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted about 1 year ago by christian
          
  </div>

  <div class="body">
    <p>This snippets shows you how to create a daemon process out of an ordinary Ruby script.</p>


	<p>First you&#8217;ll need the daemons gem:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> gem install daemons
</pre></p>


	<p>Then you&#8217;ll need the daemon script, for example daemon.rb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>rubygems<span class="String">'</span></span>
<span class="line-numbers">   2 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>daemons<span class="String">'</span></span>
<span class="line-numbers">   3 </span> 
<span class="line-numbers">   4 </span> pwd  <span class="Operator">=</span> <span class="LibraryClassType">File</span>.<span class="FunctionName">dirname</span>(<span class="LibraryClassType">File</span>.<span class="FunctionName">expand_path</span>(<span class="Variable">__FILE__</span>))
<span class="line-numbers">   5 </span> file <span class="Operator">=</span> pwd <span class="Operator">+</span> <span class="String"><span class="String">'</span>/../lib/background_service.rb<span class="String">'</span></span>
<span class="line-numbers">   6 </span> 
<span class="line-numbers">   7 </span> <span class="LibraryClassType">Daemons</span>.<span class="FunctionName">run_proc</span>(
<span class="line-numbers">   8 </span>   <span class="String"><span class="String">'</span>background_service<span class="String">'</span></span>, <span class="LineComment"><span class="LineComment">#</span> name of daemon</span>
<span class="line-numbers">   9 </span> <span class="LineComment"><span class="LineComment">#</span>  :dir_mode =&gt; :normal</span>
<span class="line-numbers">  10 </span> <span class="LineComment"><span class="LineComment">#</span>  :dir =&gt; File.join(pwd, 'tmp/pids'), # directory where pid file will be stored</span>
<span class="line-numbers">  11 </span> <span class="LineComment"><span class="LineComment">#</span>  :backtrace =&gt; true,</span>
<span class="line-numbers">  12 </span> <span class="LineComment"><span class="LineComment">#</span>  :monitor =&gt; true,</span>
<span class="line-numbers">  13 </span>   <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>log_output</span> =&gt; <span class="BuiltInConstant">true</span>
<span class="line-numbers">  14 </span> ) <span class="Keyword">do</span>
<span class="line-numbers">  15 </span>   exec <span class="String"><span class="String">&quot;</span>ruby <span class="String"><span class="String">#{</span>file<span class="String">}</span></span><span class="String">&quot;</span></span>
<span class="line-numbers">  16 </span> <span class="Keyword">end</span>
</pre></p>


	<p>Change the file variable to point to the script you want to daemonize and your good to go.</p>


	<p>You can now execute the daemon.rb script without parameters to get a list of available commands for controlling the daemon process:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Variable">ERROR</span>: no command given
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> <span class="Variable">Usage</span>: lib<span class="Operator">/</span>background_service.<span class="FunctionName">rb</span> <span class="Operator">&lt;</span>command<span class="Operator">&gt;</span> <span class="Operator">&lt;</span>options<span class="Operator">&gt;</span> <span class="Operator">-</span><span class="Operator">-</span> <span class="Operator">&lt;</span>application options<span class="Operator">&gt;</span>
<span class="line-numbers">   4 </span> 
<span class="line-numbers">   5 </span> <span class="Operator">*</span> where <span class="Operator">&lt;</span>command<span class="Operator">&gt;</span> is one of:
<span class="line-numbers">   6 </span>   start         start an instance of the application
<span class="line-numbers">   7 </span>   stop          stop all instances of the application
<span class="line-numbers">   8 </span>   restart       stop all instances <span class="Operator">and</span> restart them afterwards
<span class="line-numbers">   9 </span>   run           start the application <span class="Operator">and</span> stay on top
<span class="line-numbers">  10 </span>   zap           set the application to a stopped state
<span class="line-numbers">  11 </span> 
<span class="line-numbers">  12 </span> <span class="Operator">*</span> <span class="Operator">and</span> where <span class="Operator">&lt;</span>options<span class="Operator">&gt;</span> may contain several of the following:
<span class="line-numbers">  13 </span> 
<span class="line-numbers">  14 </span>     <span class="Operator">-</span>t, <span class="Operator">-</span><span class="Operator">-</span>ontop                      <span class="Variable">Stay</span> on top (does <span class="Operator">not</span> daemonize)
<span class="line-numbers">  15 </span>     <span class="Operator">-</span>f, <span class="Operator">-</span><span class="Operator">-</span>force                      <span class="Variable">Force</span> operation
<span class="line-numbers">  16 </span> 
<span class="line-numbers">  17 </span> <span class="Variable">Common</span> options:
<span class="line-numbers">  18 </span>     <span class="Operator">-</span>h, <span class="Operator">-</span><span class="Operator">-</span>help                       <span class="Variable">Show</span> this message
<span class="line-numbers">  19 </span>         <span class="Operator">-</span><span class="Operator">-</span>version                    <span class="Variable">Show</span> version
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/8-ruby">ruby</a>, <a href="/tags/492-daemons">daemons</a>, <a href="/tags/258-daemon">daemon</a>, <a href="/tags/493-process">process</a>, <a href="/tags/494-background">background</a>
    
    
  </div>
</div>






