- 2010-01-13 (水) 19:54
- unix
何回やってもハマるから書いとく。
.forwardやsmrshについての解説はここでは飛ばします。ようは受信メールをトリガーに何か処理をするためのものです。(携帯の空メール連携なんかは良くやりますね。)
大事なところはここ。
プログラム名の前にあるパス名は全て取り除かれるため、 “/usr/bin/vacation”, “/home/server/mydir/bin/vacation”, “vacation” などは全て “/usr/libexec/sm.bin/vacation” と解釈されます。
Manpage of SMRSH
.forwardで起動するコマンドのパスだけを書き換えてもファイル名しか見てないので意味がありません。
元の設定
例えば、これまで起動していたコマンドが[/path/to/old/command]とします。
.forwardは以下な感じ。
|/path/to/old/command
/etc/smrshにはシンボリックリンクが張られています。
# ln -s /path/to/old/command /etc/smrsh/command
起動コマンドパスの変更
何らかの事情でcommandコマンドのパスが変わって、[/path/to/new/command]になったとします。
当然ながら.forwardの起動コマンドパスを書き換えます。
|/path/to/new/command
これでokと思って、メールとの連携をするとなぜか[/path/to/old/command]が実行されます。
おかしいと思って/var/log/maillogを見ると、ちゃんと[/path/to/new/command]が実行されているログが残っています。
Jan 12 18:22:30 user sendmail[12152]: xxxxxxxxxxxxxxxxx: to=|/path/to/new/command ...
[/path/to/new/command]が実行されるはずで、ログにも記録されているのに、なぜか[/path/to/old/command]が実行される。なんで?なんで?となるわけです。
実はsmrshでは冒頭の引用のとおり.forwardに書いてある起動コマンドのパスなんか見ちゃあいないんですね。見ているのはファイル名だけで、結局は/etc/smrshにある同名のコマンドを実行するだけだと。
つまりこの場合は/etc/smrsh/にあるシンボリックリンクを書き換えないとダメなんですね。
# rm /etc/smrsh/command # ln -s /path/to/new/command /etc/smrsh/command
これで[/path/to/new/command]が新たに起動するようになります。
あまり無いことなんで
はまります。たまにしかやらないので今回もはまりました。。。
ここに書いて次こそ忘れないように。
トラックバック:0
- このエントリーのトラックバックURL
- /blog/2010/01/sendmail_smrsh.html/trackback
- Listed below are links to weblogs that reference
- sendmail .forwardで起動するコマンドのパスを変えたら、smrshも変更する from Shin x blog