crontabの環境変数PATHについて調べてみた

crontab -e で設定したときのユーザのcrontabで環境変数PATHがどうなっているのか調べてみました。
環境はCentOS6.5です。

crontabのPATHは貧弱であった

crontab -e して
*/1 * * * * printenv > /tmp/printenv.txt
このように設定して、1分後に作成されたファイルを見てみると、
$ cat /tmp/printenv.txt
SHELL=/bin/sh
USER=vagrant
PATH=/usr/bin:/bin
PWD=/home/vagrant
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/vagrant
LOGNAME=vagrant
_=/usr/bin/printenv
貧弱ぅ貧弱ぅ!な環境になっておりました。
PATHが/usr/binと/binだけというのは何ともお粗末ですね・・・。

私は最新のPerlをplenvを使って /opt/plenv/shims/perl のようなパスに入れてるのですが、このままだとcrontabにフルパスを書かねばなりません。(まあそれでもいいのですが)

crontab内でPATHを設定する

crontabは冒頭で任意の環境変数をセットすることができるので、PATHを自分で定義できるかどうか試してみました。
PATH=/opt/plenv/shims:/usr/bin:/bin

*/1 * * * * perl -v > /tmp/perlversion.txt
1分まって結果を見てみると、
$ cat /tmp/perlversion.txt

This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux
できました!
PATHの一番左に記述した/opt/plenv/shimsが優先されて、見事に最新版のperlが呼び出されました!
カテゴリ: