systemd: 표준 출력을 로그 파일로 리디렉션하는 방법

systemd: 표준 출력을 로그 파일로 리디렉션하는 방법

시스템 서비스가 있습니다.

[Unit]
Description=My application

[Service]
ExecStart=/bin/java myapp.jar
Type=simple
User=photo

옵션이 있습니다:표준출력=그러나 그것을 사용하여 파일에 쓰는 방법을 이해하지 못합니다. https://www.freedesktop.org/software/systemd/man/systemd.exec.html

파일 경로를 어딘가에 넣기를 바랐지만 설명서에서는 소켓과 파일 설명자에 대해 설명합니다. 해당 키워드보다 더 많은 구성이 필요한 것 같습니다.

파일 경로는 어디에 넣어야 하나요? 이 용도의 예를 찾을 수 없습니다.

감사해요

답변1

사용:

[Unit]
Description=My application

[Service]
ExecStart=/usr/bin/java -jar myapp.jar
Type=simple
User=photo
StandardOutput=file:/var/log/logfile

여기에 설명된 대로:https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

이렇게 하면 서비스를 다시 시작할 때마다 로그 파일 내용을 덮어쓰게 됩니다. StandardOutput/Errorsystemd 지시문은 파일 추가를 지원하지 않습니다.

서비스를 다시 시작하는 사이에 파일 로그를 유지하고 새 줄만 추가하려면 다음을 대신 사용하세요.

[Unit]
Description=My application

[Service]
ExecStart=/usr/bin/sh -c 'exec /usr/bin/java -jar myapp.jar'
Type=simple
User=photo

exec/bin/java즉 , 포킹 없이 리다이렉션을 설정한 후 쉘 프로그램이 해당 프로그램으로 대체된다는 뜻이다 . 따라서 /bin/java직접 실행하는 것과 별 차이가 없습니다 ExecStart=.

답변2

애플리케이션이 Python 스크립트인 경우 다음도 설정해야 합니다.

Environment=PYTHONUNBUFFERED=1

그렇지 않으면 버퍼가 플러시될 때까지 로그 메시지가 표시되지 않습니다.

관련 정보