Home > unix > sendmail .forwardで起動するコマンドのパスを変えたら、smrshも変更する

sendmail .forwardで起動するコマンドのパスを変えたら、smrshも変更する

  • 2010-01-13 (水) 19:54
  • unix
この記事の所要時間: 242

何回やってもハマるから書いとく。

.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]が新たに起動するようになります。

あまり無いことなんで

はまります。たまにしかやらないので今回もはまりました。。。

ここに書いて次こそ忘れないように。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2010/01/sendmail_smrsh.html/trackback
Listed below are links to weblogs that reference
sendmail .forwardで起動するコマンドのパスを変えたら、smrshも変更する from Shin x blog

Home > unix > sendmail .forwardで起動するコマンドのパスを変えたら、smrshも変更する

検索
フィード
メタ情報

Return to page top