̃Gg[͂ĂȃubN}[Nɒlj

Unix :: cron / 動的にコマンドパスを設定する



例えば php のパスが環境によって、/usr/bin/php だったり、/usr/local/bin/php だったりするので、都度 cron を書き換える必要があって面倒。
(cronでパスを指定している場合です。スクリプト内でパスを設定するのは好みではない)

以下のように cron を記述することによって 動的にコマンドパスを設定 できるので、環境が変わった場合でも移植性が高まります。



前提条件

cron起動時、/bin:/usr/bin にパスが通っているものとします。
パスの確認は 実際に記述しよとしている crontab に、下記のように書いて試してみると良いです。

* * * * *  echo ${PATH} > /tmp/path.out


サンプル

動作するサンプルと動作しないサンプルをそれぞれ2つずつ紹介します。

○ 動作するサンプル

環境変数 ${PHP} に phpコマンドパスを動的に設定する

* * * * *  PHP=`which php`; ${PHP} -r 'echo "php!";' > /tmp/php.out1


最初に phpコマンドパス を展開してしまう(おすすめ)

* * * * *  `which php` -r 'echo "php!";' > /tmp/php.out2


× 動作しないサンプル

環境変数 ${PHP} には `which php` という文字列が代入されるだけ

PHP=`which php`
* * * * *  ${PHP} -r 'echo "php!";'


which コマンドはフルパスで書いてはいけない

* * * * *  `/bin/which php` -r 'echo "php!";' > /tmp/php.out2



unix/cron/dynamic_commandpath.txt