systemd
によって管理される単純なPythonスニペットがあります rsysogd
にログを記録するサービス 構成ファイルを定義して、定義した形式でsyslogサーバーに配置するデーモン。これは今のところ正常に機能しています。
以下のコードでは、サーバーにログオンする文字列として引数を渡します。以下のコードをモジュールとして使用しており、ロギングのみに使用しています。実際のスクリプトでは、これをロギングの目的で使用しています。
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
アプリケーションはsystemd
によって管理されているため journalctl -xe
から見たときに、syslogのコピーを利用できるようにしています。 およびjournalctl -u <my-service>
ジャーナルログに記録している他の重要な情報があるので、これは起こりたくありません。
サービス定義は
です[Unit]
Description=Computes device foobar availability status
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
WatchdogSec=60
RestartSec=10
Restart=always
LimitNOFILE=4096
[Install]
WantedBy=default.target
および/etc/systemd/journald.conf
ファイル、有効にしていない 利用可能なオプションの。このjournald.confドキュメントを調べて、ForwardToSyslog=no
を使用しました journald
を再起動しました としてのサービス
systemctl restart systemd-journald
また、サービスユニットを再起動しましたが、syslogサーバーへのログアウトが表示されますおよび ジャーナルログにも。ここで欠けているオプションは何ですか?
承認された回答:
rsys[l]ogdデーモンにログを記録するsystemdサービスによって管理される単純なPythonスニペットがあります[…]
いいえ、していません。
あなたが持っているのは、systemdジャーナルにログを記録するサービスです。よく知られている/dev/log
をリッスンしているサーバー Pythonプログラムが通信しているソケットはrsyslogd
ではありません 。 systemd-journald
です 。 rsyslogd
反対側に取り付けられている systemd-journald
の 、そしてあなたのPythonプログラムはそれに話しかけていません。
このことから、systemd-journald
を介してものを送信しない唯一の方法は明らかです。 その他を使用することです rsyslogd
にルーティングします 、ない Pythonライブラリがデフォルトで使用するよく知られたソケット。それはすべて、rsyslogd
をどのように構成したかによって異なります。 。
-
imudp
を使用してUDPサーバーをオンにしている可能性があります モジュール。この場合、そのようなUDPサーバーと通信する別のPythonライブラリを使用して、Pythonプログラムにそれを使用するように指示できます。 (Pythonのsyslogライブラリは、よく知られているローカルソケットを使用するように配線されています。) - または(そして、マシンの外でUDPサービスを公開しないように注意する必要がある場合は)
rsyslogd
を指定することもできます。 よく知られていない2番目のAF_LOCAL
imuxsock
でこれを設定してリッスンするソケット モジュールの構成。繰り返しになりますが、Pythonプログラムにそれを使用し、別のPythonライブラリを使用するように指示する必要があります。
Pythonプログラムで正確に行うことは、この回答の範囲を超えています。
さらに読む
- https://unix.stackexchange.com/a/294206/5132