ログファイルに出力するシステムサービスがあります
StandardOutput=file:/path/to/log/file
StandardError=file:/path/to/error/file
これらの出力とエラーの前にデータ+時間を追加して読み取ることができる方法は何ですか?
10-09-2019 12:43:23 The output here.
答え1
StandartOutput
私はsystemdを使ってこれを行う方法が見つかりませんでしたが、StandardError
systemdで実行されているpython3スクリプトの解決策を見つけました。 Journaldはデフォルトで出力をsyslogに送信するため、rsyslog(またはシステム上のすべてのsyslogユーティリティ)を使用して必要なものを取得できます(出力はJournaldに送信されるかのようにジャーナルでも複製されますが、関連するものと同じように)syslogは次のようになります。 。有効になります(ほとんどの最新ディストリビューションのデフォルト設定)。
これは私の/etc/rsyslog.d/python3_custom.conf
設定ファイルです。
template(name="python3_custom_file" type="string" string="/var/log/python3/%programname:16:$%/out.log")
template(name="python3_custom_output" type="list") {
property(name="timereported" dateFormat="rfc3339")
constant(value=" ")
property(name="syslogseverity-text" caseConversion="upper")
property(name="msg" spifno1stsp="on")
property(name="msg" droplastlf="on")
constant(value="\n")
}
if($programname startswith 'python3_custom_') then {
action(type="omfile" dynaFile="python3_custom_file" template="python3_custom_output")
stop
}
それからあなたはsystemctl restart rsyslog
。最後に、どのsyslogを使用するかをsystemdサービスに通知する必要があります。programname
ファイルにこのディレクティブを追加するだけです。これにより、ディレクティブの最後に出力するために変更する必要がある複数のサービスを持つことができます(必要に応じて簡単に変更できます)。SyslogIdentifier=python3_custom_programname
.service
programname
/var/log/python3/programname/out.log
答え2
これを試してください(警告:テストされていません)
Enable
そしてStart
「logging.service」systemctl
[Service]
定義では、logging.service
次を使用します。
[Unit]
Description=Start logging server # or whatever you choose to call it
[Service]
...
Type=forking
ExecStart=/bin/bash myLogger.sh start
...
- スクリプト
bash
(myLogger.sh
または希望の名前で呼び出す)。スクリプト内のログの各行を次から始めます。
printf '%(%Y-%m-%d %H:%M:%S)T' -1
printf
改行は導入されていないため、すぐ後ろにログデータを追加できます。