ごく基本的な内容なのだが自分用メモとして書いておく。

現象

crontabのエラー通知がメールとして届かない。/var/log/maillogを見ると、user_hoge@example.comに送ろうとして、user unknownで失敗している。

環境

とあるVPSで借りているRHEL4。

% cat /etc/redhat-release
Red Hat Enterprise Linux ES release 4 (Nahant Update 4)
% uname -a
Linux phyzz.bz 2.6.18-028stab056 #1 SMP Mon Nov 2 13:19:07 UTC 2009 i686 i686 i386 GNU/Linux

対処

sendmailの仮想ユーザテーブルを書き換え、データベースファイルを更新する。

用語

  • example.com
    →サーバ契約と同時に取得したドメイン
  • user_hoge
    →サーバ引き渡し時に用意されていたユーザ名
  • user_kwappa
    →新しく追加したcronを動作させるユーザ名

/etc/mail/virtusertableの修正

変更前

% cat /etc/mail/virtusertable
apache@example.com                         apache
root@example.com                           user_hoge
postmaster@example.com                     user_hoge
user_hoge@example.com                      user_hoge
@example.com                               error:nouser User unknown

左側のアカウント宛に送られたメールは右側のユーザのメールボックスに転送される。主に管理するユーザはuser_kwappaなので、rootとかpostmaster宛のものも転送設定する。

変更後

# vi /etc/mail/virtusertable
apache@example.com                         user_kwappa
root@example.com                           user_kwappa
postmaster@example.com                     user_kwappa
user_hoge@example.com                      user_hoge
user_kwappa@example.com                    user_kwappa
@example.com                               error:nouser User unknown
データベースの更新

データベースの更新

# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

まとめ

わかってしまえばまぁ当然みたいな内容だけど、たどり着くのはそれなりに大変だった。linuxのユーザアカウントでメールを受け取る機会なんて減ってるしなぁ…と言い訳しつつ、インフラの勉強も継続しなければと反省している。