로그 파일로 출력하는 시스템 서비스가 있습니다
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
줄바꿈이 도입되지 않으므로 바로 뒤에 로그 데이터를 추가할 수 있습니다.