systemd StandardOutput을 파일로 보낼 때 날짜+시간을 포함하는 방법

systemd StandardOutput을 파일로 보낼 때 날짜+시간을 포함하는 방법

로그 파일로 출력하는 시스템 서비스가 있습니다

StandardOutput=file:/path/to/log/file
StandardError=file:/path/to/error/file

이러한 출력 및 오류 앞에 데이터 + 시간을 추가하여 읽을 수 있는 방법은 무엇입니까?

10-09-2019 12:43:23 The output here.

답변1

StandartOutputsystemd를 사용하여 이 작업 을 수행하는 방법을 찾지 못했지만 StandardErrorsystemd로 실행되는 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.serviceprogramname/var/log/python3/programname/out.log

답변2

이것을 시도해 보세요(경고: 테스트되지 않음)

  1. Enable그리고 Start"logging.service"systemctl

  2. [Service]정의 에서 logging.service다음을 사용하십시오 .

[Unit]
Description=Start logging server   # or whatever you choose to call it

[Service]
...
Type=forking
ExecStart=/bin/bash myLogger.sh start
...

  1. 스크립팅 bash( myLogger.sh또는 원하는 이름으로 부르기). 스크립트에서 로그의 각 줄을 다음으로 시작합니다.
printf '%(%Y-%m-%d %H:%M:%S)T' -1

printf줄바꿈이 도입되지 않으므로 바로 뒤에 로그 데이터를 추가할 수 있습니다.

관련 정보