[Server & Network General] さくらのレンタルサーバー の crontab で rbenv install した Ruby を利用する方法
以前に別サーバの RVM 環境で設定しましたが、rbenv でセットアップしたのであらためて確認します。
今回もこちらを参考にさせて頂きました。
rbenv は下記の形式でインストールされています。
パスとバージョンを確認する
ruby
コマンドを実行するシェルスクリプトを用意します。
#!/usr/local/bin/zsh
ruby -v
echo $path
スクリプトを実行します。
パスが読まれていることが分かります。
% 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
環境変数を空にした結果と比較します。
% 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
でジョブを削除します。
* * * * * env > ~/cron_env
内容はこうなりました。
% cat cron_env
LOGNAME=****
PATH=/usr/bin:/bin
PWD=/home/****
USER=****
HOME=/home/****
SHELL=/bin/sh
crontab 上の環境変数を読み込んで、シェルスクリプトを実行します。
パスが上書きされているので、ruby v1.8 すら見つからない事が分かります。
% 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 は、シェルスクリプトを呼び出すだけの仕事をします。
* * * * * $HOME/local/bin/ruby.sh
シェルスクリプト内でフルパスで ruby を呼び出します。
#!/usr/local/bin/zsh
$HOME/local/rbenv/versions/2.4.1/bin/ruby -v
echo $path
ちょっとダサいですが無事実行できました。
% env - `cat ~/cron_env` local/bin/ruby.sh
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-freebsd9.1]
/usr/bin /bin