[Server & Network General] さくらのレンタルサーバー の crontab で rbenv install した Ruby を利用する方法

以前に別サーバの RVM 環境で設定しましたが、rbenv でセットアップしたのであらためて確認します。

[markdown]
> * [[Ruby] crontab: ruby スクリプトを実行する | deadwood](https://www.d-wood.com/blog/2014/01/20_5301.html)

今回もこちらを参考にさせて頂きました。

> * [cron上でのコマンド実行を再現する – Qiita](http://qiita.com/nog/items/0e9ab97cf59d82cdf6be?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=6d4e40afe7-Qiita_newsletter_106_28_5_2014&utm_medium=email&utm_term=0_e44feaa081-6d4e40afe7-32774809)

rbenv は下記の形式でインストールされています。

> * [[Server & Network] さくらのレンタルサーバーに Ruby を rbenv install する | deadwood](https://www.d-wood.com/blog/2017/07/18_9092.html)

## パスとバージョンを確認する

`ruby` コマンドを実行するシェルスクリプトを用意します。

“`bash:~/local/bin/ruby.sh
#!/usr/local/bin/zsh
ruby -v
echo $path
“`

スクリプトを実行します。
パスが読まれていることが分かります。

“`prettyprinted
% local/bin/ruby.sh
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-freebsd9.1]
/home/****/local/bin /home/****/local/rbenv/shims /home/****/local/rbenv/bin /home/****/local/bin /sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /home/****/bin
“`

環境変数を空にした結果と比較します。

“`prettyprinted
% env – local/bin/ruby.sh
ruby 1.8.7 (2012-10-12 patchlevel 371) [amd64-freebsd9]
/bin /usr/bin /usr/ucb /usr/local/bin
“`

## crontab 上の環境変数を確認する

crontab 上の環境変数を確認します。
`crontab -e` でファイルを編集します。
`~/cron_env` が作成されたら、`crontab -r` でジョブを削除します。

“`prettyprinted
* * * * * env > ~/cron_env
“`

内容はこうなりました。

“`prettyprinted:~/cron_env
% cat cron_env
LOGNAME=****
PATH=/usr/bin:/bin
PWD=/home/****
USER=****
HOME=/home/****
SHELL=/bin/sh
“`

crontab 上の環境変数を読み込んで、シェルスクリプトを実行します。
パスが上書きされているので、ruby v1.8 すら見つからない事が分かります。

“`prettyprinted
% env – `cat ~/cron_env` local/bin/ruby.sh
local/bin/ruby.sh:3: command not found: ruby
/usr/bin /bin
“`

## crontab を設定する

`crontab -e` で rbenv のパスを加えるとうまく動きそうな気がしますが、効いている気配がありませんので作戦を変えます。
crontab は、シェルスクリプトを呼び出すだけの仕事をします。

“`prettyprinted
* * * * * $HOME/local/bin/ruby.sh
“`

シェルスクリプト内でフルパスで ruby を呼び出します。

“`bash:~/local/bin/ruby.sh
#!/usr/local/bin/zsh
$HOME/local/rbenv/versions/2.4.1/bin/ruby -v
echo $path
“`

ちょっとダサいですが無事実行できました。

“`prettyprinted
% env – `cat ~/cron_env` local/bin/ruby.sh
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-freebsd9.1]
/usr/bin /bin
“`
[/markdown]