[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]