Ubuntu で cron でスクリプトをセットするときのパス解決

rbenv や nodebrew で実行プログラムを管理してる場合、ユーザの HOME 下に環境を構築するため .bashrc や .bash_profile などでパスを通します。

しかし、crontab でそのままスクリプトを定義しても、ruby や node にパスが通っておらず動かない。調べたら bash の -l, --login オプションを付ければいいというので、試したがダメ。

Ubuntu の場合デフォルトで置かれる .bashrc の先頭で対話的ログインシェル以外は読み込みを止めてしまう記述があった。よって、それを外すなりその処理の前に PATH を再定義する必要がありました。

考えたあげく、アプリケーションの設定として実行ユーザーの環境設定に依存するのは止めた方が良いと、外出しの設定として PATH を定義するスクリプトソースを各 cron スクリプトの先頭で読ませるようにしました。

PATH=$HOME/.rbenv/shims:$HOME/.rbenv/bin:$HOME/.nodebrew/current/bin:$PATH