rbenv on Cron

Cronでrbenvで動かしてるruby*1を動かすのに手間取ったので備忘録として。

前提条件

  1. rbenvの設定は/etc/profileの中で行っている
    • ユーザーごとにrbenvの設定があるわけではなく、全ユーザー共通のrbenvがあるため
  2. 普段はログインシェルとしてzshを使っているので.zshrcの中で/etc/profileをsourceしてる

Cronでrbenvのrubyを動かすときは・・・

当然、rbenvの諸々の設定を予め読み込んでおかないといけない。
普通に使っている場合はログイン時に上記のように設定を読み込んでいるので動くが、Cronはそもそもログインしていないので、/etc/profileなどの設定はガン無視される・・・らしい。

シェル経由で動かす場合

最初に「source /etc/profile」と書いたりしてとにかくrbenvをロードする。

直でrubyスクリプトをcrontabに書く場合

ruby (スクリプト名)」の前にやはり「source /etc/profile」を書いて「;」で繋ぐ。

05 03 * * * root source /etc/profile; ruby /path/to/script/script_name.rb

もっとスマートな方法ないすかね・・・。

*1:っていう表現はどうなんですかね?