- blogs:
- cles::blog

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

cron に仕込んだ ruby スクリプトを rbenv でインストールした ruby で起動させようとして試行錯誤したのでメモ。
まず、rbenv が設定されている環境でシェルに ruby と打ち込むと実際に起動されるスクリプトは /usr/bin/ruby などの ruby 本体はなく、~/.rbenv/shims/rubyというシェルスクリプトになっています。ちょっと奇妙な感じがしますが、これが rbenv のミソで、この小さなシェルスクリプトが環境に応じてどの ruby の本体を呼び出すかという振り分けをしてくれています。
ここで、例えば /path/to/1.8.5dir というディレクトリと、/path/to/1.9.3dir というディレクトリを作って、前者はシステムデフォルト、後者は 1.9.3-p327 の ruby が起動するように設定しておきます。
起動した ruby のバージョンが分かるようにバージョンを吐くだけの下記のようなスクリプトを用意して、それぞれのディレクトリに置いておきます。先頭行を #!/bin/env ruby としている(つまり、PATH に従って ruby を探すようになっている)ことに注意してください。ここでうっかり #!/usr/bin/ruby などと書いてしまうと、呼び出される ruby の本体が /usr/bin/ruby に固定されてしまうのでバージョンが切り替わらなくなってしまいます。恥ずかしながら、ここでしばらくハマってしまいました。。。
version.rb
ここで、テストのために下記の4つのエントリを crontab に追加します。ポイントは全ての行で export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" を行って、rbenv 用の振り分けスクリプトを PATH に追加していることです。1,2 と 3,4 の違いはディレクトリに cd してから起動しているか、ダイレクトに ruby スクリプトを起動しているかの違いを確認するためのものです。
仕込んでから一分ごとに syslog に下記のような行が出力されるはずです。
この方法だと cd してもしなくてもきちんとバージョンが切り替わることが確認できました。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6527
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110728)
3 . 年次の人間ドックへ(110334)
4 . 2023 年分の確定申告完了!(1つめ)(109884)
5 . 三菱鉛筆がラミーを買収(109787)