佐藤です。 Hiroki Kashiwazaki <r...@iic.hokudai.ac.jp> wrote in <86pqqkkz0b.wl%...@iic.hokudai.ac.jp>:
re> デーモンに対して HUP が送られた時,そのデーモンプロセスにとっての re> 環境変数 PATH はどのように定まるのでしょう. re> re> というのも,また sysutils/munin-node に関する話題なのですが,先日 re> アップデートされて 1.4.5_5 になった折に /etc/newsyslog.conf 内の re> munin-node に関するエントリーの bug fix も行われまして,きちんと re> 毎晩 0 時に newsyslog から HUP が送られて log rotate が行われるよ re> うになったのですが,それに伴って /sbin 下にある sysctl などを使う re> プラグインが not found エラーを吐くようになりました.プラグインに re> echo $PATH 1>&2 を仕込んでみたところ,HUP した時の PATH は /bin: re> /usr/bin でした.この PATH はどこから来ているんでしょう. /bin:/usr/bin ではなくて /usr/bin:/bin ではないでしょうか? munin-node は、デーモンプロセスの管理に Net::Server モジュールを使っています。 このモジュールの中には、SIGHUP を受けとった時に $PATH を全部クリアする処理が入っています。 一方、$PATH が空の状態で /bin/sh が起動すると、_PATH_DEFPATH が設定されます。 /usr/include/paths.h を読むと分かりますが、_PATH_DEFPATH は /usr/bin:/bin です。munin-node がプラグインを呼び出す時の $PATH が、 SIGHUP の前後で変化するのは、これらが原因です。 (cron や newsyslog を実行しているユーザの環境変数は関係ありません) プラグイン実行の際、munin-node 実行時のユーザの $PATH を継承する、という ところが、そもそもデザインとして今ひとつですし、SIGHUP の前後で $PATH の一貫性を維持することもしていないところをみると、 ちゃんと考えられた結果ではないのでしょう。 これは Munin 側のバグと言って良いのではないかと思います。 修正のしかたはいろいろあると思いますが、 プラグインの中でフルパスを使うのが一番無難だと思います。 -- Hiroki
pgpPc0u3DAd5S.pgp
Description: PGP signature