私が定義した形式でsyslogサーバーに入れるために設定ファイルを定義するデーモンsystemd
にログインするサービスとして管理される単純なPythonフラグメントがあります。rsysogd
これまではうまくいきます。
次のコードは、サーバーにログインしたい文字列にパラメータを渡します。私は以下のコードをモジュールとして使用してロギングに単独で使用していますが、実際のスクリプトではこれをロギングに使用します。
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
アプリケーションはこのアプリケーションsystemd
によって管理されているため、表示時に利用可能なsyslogのコピーを作成し、syslogに他の重要な情報を記録するので、そうしないことを願っていjournalctl -xe
ます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
私がアクティブにしていないファイルからどの利用可能なオプション。これを探しました。ログ構成ファイルドキュメントを使用しForwardToSyslog=no
てjournald
サービスを再起動してください
systemctl restart systemd-journald
サービスデバイスも再起動しましたが、syslog サーバーのログ出力が表示されます。そしてまた、ログを記録します。ここでどのオプションがありませんか?
ベストアンサー1
rsys[l]ogdデーモン[...]に書き込むシステムサービスで管理される単純なPythonフラグメントがあります。
いいえ、まだしていません。
あなたが持っているのは、システムログに記録するサービスです。 Pythonプログラムが通信しているよく知られているソケットを受信する/dev/log
サーバーではありませんrsyslogd
。これはsystemd-journald
。 rsyslogd
はい反対側に付いている、systemd-journald
そしてPythonプログラムはそれと会話しません。
これで見ると、なしで何かを送るsystemd-journald
唯一の方法は明らかです。その他にルーティングrsyslogd
、いいえデフォルトでは、Pythonライブラリで使用されるよく知られたソケットです。それはすべてあなたがそれを構成する方法によって異なりますrsyslogd
。
- 次のコマンドを使用してUDPサーバーモジュールの電源を入れることができます
imudp
。この場合、そのUDPサーバーと通信する別のPythonライブラリを使用して、Pythonプログラムにこのモジュールを使用するように指示できます。 (Python syslogライブラリはよく知られているローカルソケットを使用するように組み込まれています。) - または(より良いことは、UDPサービスをコンピュータの外部に公開しないように注意する必要があることを考慮して)、モジュール構成でそれを設定して、待機する2番目の不明
rsyslogd
なソケットを提供できることです。繰り返しますが、Pythonプログラムにそれを使用し、他のPythonライブラリを使用するように指示する必要があります。AF_LOCAL
imuxsock
Pythonプログラムで実行する作業は、この回答の範囲外です。