BLOGTIMES
2014/02/19

rbenv でインストールした ruby を cron から使う

  ruby 
このエントリーをはてなブックマークに追加

cron に仕込んだ ruby スクリプトを rbenv でインストールした ruby で起動させようとして試行錯誤したのでメモ。

まず、rbenv が設定されている環境でシェルに ruby と打ち込むと実際に起動されるスクリプトは /usr/bin/ruby などの ruby 本体はなく、~/.rbenv/shims/rubyというシェルスクリプトになっています。ちょっと奇妙な感じがしますが、これが rbenv のミソで、この小さなシェルスクリプトが環境に応じてどの ruby の本体を呼び出すかという振り分けをしてくれています。

$ which ruby ~/.rbenv/shims/ruby

ここで、例えば /path/to/1.8.5dir というディレクトリと、/path/to/1.9.3dir というディレクトリを作って、前者はシステムデフォルト、後者は 1.9.3-p327 の ruby が起動するように設定しておきます。

$ cd /path/to/1.8.5dir $ rbenv version system (set by /home/hsur/.rbenv/version) $ cd /path/to/1.9.3dir $ rbenv version 1.9.3-p327 $ rbenv version 1.9.3-p327 (set by /path/to/1.9.3dir/.ruby-version)

起動した ruby のバージョンが分かるようにバージョンを吐くだけの下記のようなスクリプトを用意して、それぞれのディレクトリに置いておきます。先頭行を #!/bin/env ruby としている(つまり、PATH に従って ruby を探すようになっている)ことに注意してください。ここでうっかり #!/usr/bin/ruby などと書いてしまうと、呼び出される ruby の本体が /usr/bin/ruby に固定されてしまうのでバージョンが切り替わらなくなってしまいます。恥ずかしながら、ここでしばらくハマってしまいました。。。

version.rb

#!/bin/env ruby puts RUBY_VERSION

ここで、テストのために下記の4つのエントリを crontab に追加します。ポイントは全ての行で export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" を行って、rbenv 用の振り分けスクリプトを PATH に追加していることです。1,2 と 3,4 の違いはディレクトリに cd してから起動しているか、ダイレクトに ruby スクリプトを起動しているかの違いを確認するためのものです。

* * * * * (export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"; cd /path/to/1.8.5dir ; ./version.rb) | logger -i -t hoge1 -p local0.info * * * * * (export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"; cd /path/to/1.9.3dir ; ./version.rb) | logger -i -t hoge2 -p local0.info * * * * * (export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"; /path/to/1.8.5dir/version.rb) | logger -i -t hoge3 -p local0.info * * * * * (export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"; /path/to/1.9.3dir/version.rb) | logger -i -t hoge4 -p local0.info

仕込んでから一分ごとに syslog に下記のような行が出力されるはずです。

Feb 19 21:55:02 sailane hoge1[30757]: 1.8.5 Feb 19 21:55:02 sailane hoge2[30753]: 1.9.3 Feb 19 21:55:02 sailane hoge3[30749]: 1.8.5 Feb 19 21:55:02 sailane hoge4[30746]: 1.9.3

この方法だと cd してもしなくてもきちんとバージョンが切り替わることが確認できました。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6527
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン