<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Ruby i skrypt startowy do SVN</title>
    <link>http://blog.zabiello.com/articles/2006/10/05/ruby-svn-start</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Ruby i skrypt startowy do SVN</title>
      <description>&lt;p&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; to &#347;wietny, darmowy system wersjonowania kodu. Jest znacznie lepszy od starego &lt;span class="caps"&gt;CVS&lt;/span&gt;&amp;#8217;a. Niestety, nigdzie nie mog&#322;em si&#281; doszuka&#263; skryptu startuj&#261;cego do serwera. Co gorsze, skrytp &lt;em&gt;svnserve&lt;/em&gt; w og&#243;le nie ma opcji zapisu numeru swojego procesu co utrudnia pisanie kodu kt&#243;ry go &amp;#8220;zabije&amp;#8221;. Na szcz&#281;&#347;cie Linux posiada komend&#281; &lt;em&gt;pidof&lt;/em&gt;. Poni&#380;ej gotowy skrypt napisany w Ruby. Nale&#380;y go umie&#347;ci&#263; w /etc/init.d, doda&#263; atrybuty wykonywalno&#347;ci (chmod a+x subversion.rb)  i doda&#263; linki symboliczne aby startowa&#322;a utomatycznie razem ze startem serwera (pod Debianem/Ubuntu robi to komenda update-rc.d -f subversion.rb defaults, pod RedHatem/CentOS/Fedor&#261; jest do tego komenda &lt;em&gt;chkconfig&lt;/em&gt;)&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class="global"&gt;$USER&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;nobody&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="global"&gt;$APP&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/usr/bin/svnserve&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="global"&gt;$DIR&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/home/SVN&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="global"&gt;$PID&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/var/run/svnserve.pid&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;script&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;start&lt;/span&gt; 
    &lt;span class="ident"&gt;system&lt;/span&gt;&lt;span class="punct"&gt;(%Q|&lt;/span&gt;&lt;span class="string"&gt;su -c &amp;quot;&lt;span class="expr"&gt;#{$APP}&lt;/span&gt; -d -r &lt;span class="expr"&gt;#{$DIR}&lt;/span&gt;&amp;quot; &lt;span class="expr"&gt;#{$USER}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;|)&lt;/span&gt;
    &lt;span class="ident"&gt;system&lt;/span&gt;&lt;span class="punct"&gt;(%Q|&lt;/span&gt;&lt;span class="string"&gt;echo `pidof -o %PPID &lt;span class="expr"&gt;#{$APP}&lt;/span&gt;` &amp;gt; &lt;span class="expr"&gt;#{$PID}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;|)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;stop&lt;/span&gt;
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;exists?&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="global"&gt;$PID&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;system&lt;/span&gt;&lt;span class="punct"&gt;(%Q|&lt;/span&gt;&lt;span class="string"&gt;/bin/kill -TERM &lt;span class="expr"&gt;#{File.read($PID)}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;|)&lt;/span&gt;
    &lt;span class="constant"&gt;true&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="ident"&gt;print&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{$APP}&lt;/span&gt; &lt;span class="expr"&gt;#{action}&lt;/span&gt;...&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="global"&gt;$defout&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;flush&lt;/span&gt; &lt;span class="comment"&gt;# unbuffered output&lt;/span&gt;
  &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt; 
    &lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="symbol"&gt;:start&lt;/span&gt; 
      &lt;span class="ident"&gt;start&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;done&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="symbol"&gt;:stop&lt;/span&gt;
      &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;stop&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt;
        &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{File.basename($APP)}&lt;/span&gt; cannot be stopped because it cannot find &lt;span class="expr"&gt;#{$PID}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="keyword"&gt;else&lt;/span&gt;
        &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;done&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="keyword"&gt;end&lt;/span&gt; 
    &lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="symbol"&gt;:restart&lt;/span&gt;
      &lt;span class="ident"&gt;stop&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt;
      &lt;span class="ident"&gt;start&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;done&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;first&lt;/span&gt;
  &lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;start&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;:&lt;/span&gt; &lt;span class="ident"&gt;script&lt;/span&gt; &lt;span class="symbol"&gt;:start&lt;/span&gt;
  &lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;stop&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;:&lt;/span&gt; &lt;span class="ident"&gt;script&lt;/span&gt; &lt;span class="symbol"&gt;:stop&lt;/span&gt;
  &lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;restart&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;:&lt;/span&gt; &lt;span class="ident"&gt;script&lt;/span&gt; &lt;span class="symbol"&gt;:restart&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="keyword"&gt;unless&lt;/span&gt; &lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;start stop restart&lt;/span&gt;&lt;span class="punct"&gt;}.&lt;/span&gt;&lt;span class="ident"&gt;include?&lt;/span&gt; &lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;first&lt;/span&gt;
  &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Usage: sudo &lt;span class="expr"&gt;#{__FILE__}&lt;/span&gt; {start|stop|restart}&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="ident"&gt;exit&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 05 Oct 2006 16:37:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:4d762cf3-fbc0-4ef8-b1ed-82a4d96284ca</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2006/10/05/ruby-svn-start</link>
      <category>Ruby</category>
      <category>subversion</category>
      <category>ruby</category>
      <category>linux</category>
    </item>
    <item>
      <title>"Ruby i skrypt startowy do SVN" by Jaroslaw Zabiello</title>
      <description>&lt;p&gt;Bo nie u&#380;ywam httpd.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Oct 2006 00:41:49 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:be7d3589-cafb-43ae-8e66-a4a5a635bcec</guid>
      <link>http://blog.zabiello.com/articles/2006/10/05/ruby-svn-start#comment-260</link>
    </item>
    <item>
      <title>"Ruby i skrypt startowy do SVN" by ciukes</title>
      <description>&lt;p&gt;Dlaczego nie uzywasz svn+httpd?&lt;/p&gt;</description>
      <pubDate>Wed, 25 Oct 2006 10:39:21 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:d6881417-84bb-4ff5-b374-0b16492c9a9d</guid>
      <link>http://blog.zabiello.com/articles/2006/10/05/ruby-svn-start#comment-259</link>
    </item>
  </channel>
</rss>
