syslog-ng サービスは systemd で開始されませんでしたが、コマンドは正常に動作します。

syslog-ng サービスは systemd で開始されませんでしたが、コマンドは正常に動作します。

CentOS 7に新しくインストールされたバージョンがあり、EPELリポジトリからsyslog-ngをインストールしました。

~: yum list | grep syslog
syslog-ng.x86_64                        3.5.6-1.el7                    @epel

systemctlで起動しようとすると、次のように失敗します。

/usr/lib/systemd/system: systemctl start syslog-ng
Job for syslog-ng.service failed. See 'systemctl status syslog-ng.service' and 'journalctl -xn' for details.

ログを見ると、ソケットに依存して正常に「起動」しますが、プロセスは次のように誤ったパラメータのエラーを返すことがわかります。

May 07 17:26:15 superserver.company.corp systemd[1]: Starting Syslog Socket.
May 07 17:26:15 superserver.company.corp systemd[1]: Listening on Syslog Socket.
May 07 17:26:15 superserver.company.corp systemd[1]: Starting System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 07 17:26:15 superserver.company.corp systemd[1]: Failed to start System Logger Daemon.
May 07 17:26:15 superserver.company.corp systemd[1]: Unit syslog-ng.service entered failed state.
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service holdoff time over, scheduling restart.
May 07 17:26:15 superserver.company.corp systemd[1]: Stopping System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: Starting System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT

サービス構成ファイルを見ると、ソケットへの依存関係とサービスを開始するために使用されるコマンドを確認できます。

[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid

問題は、上記のコマンドを実行すると正常に起動し、期待どおりに機能することです。

私の質問は:プログラム起動コマンドを実行するのと同じプログラムを起動するシステムの違いは何ですか?何が問題なのかを調べるにはどうすればよいですか?


編集1

Raymondは彼の答えで提案されているようにデバッグ出力を有効にしましたが、出力は私たちに多くを教えてくれません。

May 08 10:31:29 server.corp systemd[1]: Starting System Logger Daemon...
May 08 10:31:29 server.corp systemd[1]: About to execute: /usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
May 08 10:31:29 server.corp systemd[1]: Forked /usr/sbin/syslog-ng as 3121
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service changed dead -> start
May 08 10:31:29 server.corp systemd[1]: Set up jobs progress timerfd.
May 08 10:31:29 server.corp systemd[1]: Set up idle_pipe watch.
May 08 10:31:29 server.corp systemd[3121]: Executing: /usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
May 08 10:31:29 server.corp systemd[1]: Got notification message for unit syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: Got message
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: got STATUS=Starting up... (Fri May  8 10:31:29 2015
May 08 10:31:29 server.corp systemd[1]: Got notification message for unit syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: Got message
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: got STATUS=Starting up... (Fri May  8 10:31:29 2015
May 08 10:31:29 server.corp systemd[1]: Received SIGCHLD from PID 3121 (syslog-ng).
May 08 10:31:29 server.corp systemd[1]: Child 3121 (syslog-ng) died (code=exited, status=2/INVALIDARGUMENT)
May 08 10:31:29 server.corp systemd[1]: Child 3121 belongs to syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service changed start -> failed
May 08 10:31:29 server.corp systemd[1]: Job syslog-ng.service/start finished, result=failed
May 08 10:31:29 server.corp systemd[1]: Failed to start System Logger Daemon. 

syslog-ngプロセスの先頭にいくつかの警告が表示されるため(正常に起動するのを妨げないため)、すべての出力を/ dev / nullにリダイレクトしましたが、最終結果は同じです。

さらに、systemd が syslog を記録できない場合、システム全体が起動しなくなります。この機能は、kmesgにログインするカーネルオプションを使用して無効にできます。

ベストアンサー1

Debian 8.1でも同じ問題が発生しましたが、syslog-ngローカル設定unix-dgramunix-socket

手がかりに陥ったRedHat Bugzillaについてのこの意見:

syslog-ng 構成ファイルのカスタマイズに関する注意事項

カスタム syslog-ng 構成を使用するユーザーは、systemd と syslog-ng レガシー構成ファイルの間の unix ソケットタイプの不一致が原因でアップグレードの問題に直面する可能性が高くなります。

  • systemd は、次のように /dev/log を生成します。unix-dgram
  • unix-streamsyslog-ng < 3.2.5では、/ dev / logが(設定ファイル)であると予想しています。

ログメッセージソースのいずれかで "unix-stream("/dev/log")" を使用する場合は、これを手動で "unix-dgram("/dev/log")" に変更する必要があります。

おすすめ記事