![systemd: 표준 출력을 로그 파일로 리디렉션하는 방법](https://linux55.com/image/123047/systemd%3A%20%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
시스템 서비스가 있습니다.
[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/Error
systemd 지시문은 파일 추가를 지원하지 않습니다.
서비스를 다시 시작하는 사이에 파일 로그를 유지하고 새 줄만 추가하려면 다음을 대신 사용하세요.
[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
그렇지 않으면 버퍼가 플러시될 때까지 로그 메시지가 표시되지 않습니다.