web-dev-qa-db-ja.com

Postfixサービスは有効ですが、再起動時に開始しません

システムの再起動後、postfixサービスが開始されません。 OpenSuse 12.1に基づく独自のカスタムLinux OSを使用していますが、最近の検証部門では、postfixのメールドロップキューにある未送信メールにより、/varリポジトリがどんどん大きくなっていることがわかりました。

誰がそれらのメールを送信しますか?システム間でログを共有するアプリケーションがいくつかあります。

私は私の答えのために別の種類のフォーラムを探していましたが、成功しませんでした。

Rebbotの後:

$systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
          Loaded: loaded (/etc/systemd/system/postfix.service; enabled)
          Active: inactive (dead)
          CGroup: name=systemd:/system/postfix.service

私はここで見つかりました Postfixは再起動時に開始しません 問題はsendmailとの競合の可能性があることを示しています。 sendmailプログラムがpostfixと適切にリンクしていることを確認するには:

$ ldd /usr/sbin/sendmail
        linux-vdso.so.1 =>  (0x00007fffa25ff000)
        libpostfix-global.so.1 => /usr/lib64/libpostfix-global.so.1 (0x00007fdb174d2000)
        libpostfix-util.so.1 => /usr/lib64/libpostfix-util.so.1 (0x00007fdb1729a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fdb16f0a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fdb16d06000)
        libdb-4.8.so => /usr/lib64/libdb-4.8.so (0x00007fdb1698a000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fdb16772000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fdb1770b000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdb16555000)

私は/var/log/messagesもチェックインしていますが、sendmailまたはpostfixの失敗に関する情報はありません。

サービスを始めましょう:

$ systemctl start postfix.service
$ systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
          Loaded: loaded (/etc/systemd/system/postfix.service; enabled)
          Active: active (running) since Sat, 28 Jan 2017 21:49:37 +0300; 41s ago
         Process: 3450 ExecStartPost=/etc/postfix/system/cond_slp register (code=exited, status=0/SUCCESS)
         Process: 3444 ExecStartPost=/etc/postfix/system/wait_qmgr 60 (code=exited, status=0/SUCCESS)
         Process: 3368 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
         Process: 3366 ExecStartPre=/etc/postfix/system/update_chroot (code=exited, status=0/SUCCESS)
         Process: 3363 ExecStartPre=/bin/echo Starting mail service (Postfix) (code=exited, status=0/SUCCESS)
        Main PID: 3443 (master)
          CGroup: name=systemd:/system/postfix.service
                  ├ 3443 /usr/lib/postfix/master
                  ├ 3445 pickup -l -t fifo -u
                  ├ 3446 qmgr -l -t fifo -u
                  ├ 3447 cleanup -z -t unix -u
                  ├ 3466 trivial-rewrite -n rewrite -t unix -u
                  ├ 3467 local -t unix
                  ├ 3468 local -t unix
                  └ 3469 local -t unix

良い。システムを再起動すると、サービスはinactive(dead)になります。 /var/logに戻るこのファイルを見つけましたmail.warn

$ cat mail.info
Jan 28 03:13:55 msx postfix/postfix-script[2527]: warning: not owned by group maildrop: /usr/sbin/postqueue
Jan 28 03:13:55 msx postfix/postfix-script[2528]: warning: not owned by group maildrop: /usr/sbin/postdrop
Jan 28 03:13:55 msx postfix/postfix-script[2530]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue
Jan 28 03:13:55 msx postfix/postfix-script[2531]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop
Jan 28 21:49:37 msx postfix/postfix-script[3430]: warning: not owned by group maildrop: /usr/sbin/postqueue
Jan 28 21:49:37 msx postfix/postfix-script[3431]: warning: not owned by group maildrop: /usr/sbin/postdrop
Jan 28 21:49:37 msx postfix/postfix-script[3434]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue
Jan 28 21:49:37 msx postfix/postfix-script[3435]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop

これが私の問題の解決に役立つかどうかはわかりません。

追加情報

postfix.serviceファイル内:

$ cat /etc/systemd/system/postfix.service
[Unit]
Description=Postfix Mail Transport Agent
Requires=var-run.mount nss-lookup.target network.target remote-fs.target syslog.target time-sync.target
After=var-run.mount nss-lookup.target network.target remote-fs.target syslog.target time-sync.target
After=amavis.service mysql.service cyrus.service ldap.service openslp.service ypbind.service
Before=mail-transfer-agent.target
Conflicts=sendmail.service exim.service

[Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
ExecStartPre=-/bin/echo 'Starting mail service (Postfix)'
EnvironmentFile=-/etc/sysconfig/postfix
ExecStartPre=/etc/postfix/system/update_chroot
ExecStart=/usr/sbin/postfix start
ExecStartPost=/etc/postfix/system/wait_qmgr 60
ExecStartPost=/etc/postfix/system/cond_slp register
ExecReload=/usr/sbin/postfix reload
ExecReload=/usr/sbin/postfix flush
ExecStop=/usr/sbin/postfix stop
ExecStopPost=/etc/postfix/system/cond_slp deregister

[Install]
WantedBy=multi-user.target

postfixサービスを開始せずに再起動した後、すべてのサービスを一覧表示します。

$systemctl list-unit-files --type=service
...
klog.service              disabled
klogd.service             masked
ldconfig.service          masked
loadmodules.service       masked
local.service             static
localfs.service           static
openhpid.service          enabled
postfix.service           enabled
postgresql.service        static
poweroff.service          static
proc.service              masked
...

OpenSuse 12.1ベースのOSで実行しているため、journalctlsystemdにまだ導入されていません

更新

LogLevel=debug/etc/systemd/system.confを設定した後、この問題に関連するデータをさらに入手することができました。 /var/log/messages/でこれを見つけました:

Jan 31 19:17:00 msx kernel:   10.111126] systemd[1]: -.mount changed dead -> mounted
Jan 31 19:17:00 msx kernel:   10.111147] systemd[1]: Activating default unit: default.target
Jan 31 19:17:00 msx kernel:   10.111153] systemd[1]: Trying to enqueue job multi-user.target/start/replace
Jan 31 19:17:00 msx kernel:   10.111204] systemd[1]: Cannot add dependency job for unit hpiwdt.service, ignoring: Unit hpiwdt.service failed to load: No such file or directory. See system logs and 'systemctl status hpiwdt.service' for details.
Jan 31 19:17:00 msx kernel:   10.111276] systemd[1]: Found ordering cycle on lwresd.service/start
Jan 31 19:17:00 msx kernel:   10.111279] systemd[1]: Walked on cycle path to nss-lookup.target/start
Jan 31 19:17:00 msx kernel:   10.111281] systemd[1]: Walked on cycle path to lwresd.service/start
Jan 31 19:17:00 msx kernel:   10.111284] systemd[1]: Breaking ordering cycle by deleting job nss-lookup.target/start
Jan 31 19:17:00 msx kernel:   10.111286] systemd[1]: Deleting job postfix.service/start as dependency of job nss-lookup.target/start

が何であるかまたはが何であるかnss-lookupもわかりません。

3
SAN ALexis

nss-lookup.targetは、オプションのsystemd特殊ターゲットの1つです。これは基本的に、起動プロセスの仮想マイルストーンとして機能しています。具体的には、DNSルックアップに影響するシステムサービス(lwresdなど)は、開始する必要がある.serviceファイルで指定する必要がありますbeforenss-lookup.target

[Unit]
Wants=nss-lookup.target
Before=nss-lookup.target

...そして、DNS解決が開始する前に完全に機能する必要があるサービスは、それを次のように簡単に指定できます。

[Unit]
After=nss-lookup.target

lwresdパッケージがこのスキームに完全に従っていないか、カスタムディストリビューションにsystemdの古いバージョンがあり、代わりにRequires=を使用する理由がある場合があります。 Wants=は現在推奨されている方法です。

Systemdがその構成で順序付けの競合(「順序付けサイクル」)を検出すると、非常に機械的な方法でそれを解決します。これは、大規模なスキームでは常に最適とは限りません。この場合、問題はlwresdnss-lookup.targetの間の順序にありましたが、Postfixは付随的な損傷としてプロセスでスキップされました。

nss-lookup.targetはオプションであるため、PostfixのRequires=依存関係として設定すると、強すぎて問題が発生する可能性があります。

1
telcoM

まず、_LogLevel=debug_に_/etc/systemd/system.conf_を追加すると、起動時のサービスで実際に何が発生するかを理解するのに役立つログが提供されます。私の更新された質問で述べたように、_nss-lookup.target_と競合する注文がありました。 _nss-lookup.target_を変数__/etc/systemd/system/postfix.service_と_[Requires]_の両方の_[After]_で直接削除すると、システムはブートプロセスでpostfixを開始できました。

1
SAN ALexis