Journald/journalctl에 기록하고 싶지 않은 특정 시스템 서비스가 있습니다. 현재 원인은 syslog에 기록되었으며(이미 교체됨) 저널d/journalctl 로그가 해당 서비스의 로그로 가득 차 있기 때문입니다(디스크 공간 문제).
Storage=volatile
이제 디스크에 너무 많이 쓰지 않도록 Journald/journalctl의 구성을 변경했습니다 . SystemMaxUse
을 ( SystemKeepFree
를) 변경할 수 있다는 것을 알고 있지만 /etc/systemd/journald.conf
다른 서비스의 로그를 해당 특정 서비스로 덮어쓰게 되므로 이는 이상적이지 않습니다. 저는 계속해서 Journald/journalctl을 사용하고 싶지만 해당 특정 서비스에 대해서는 사용하지 않습니다.
/etc/systemd/system/myservice.service
Journald/journalctl에 기록되지 않도록 서비스 단위 파일에서 변경할 수 있는 구성이 있습니까?
답변1
장치에 대한 별도의 로깅 네임스페이스를 만들고 필요에 따라 로깅 구성을 사용자 지정합니다.
존재하다 /etc/.../myapp.service
:
[Service]
...
LogNamespace=noisy
이 네임스페이스에 대한 새 구성을 만듭니다.
cd /etc/systemd
cp journald.conf [email protected]
nano [email protected]
필요에 따라 구성을 편집합니다. 예를 들어, 저는 애플리케이션의 syslog 로그에 관심이 없기 Storage=volatile
때문에 이를 syslog로 설정했습니다 (애플리케이션 로그가 이미 충분합니다). RuntimeMaxUse=10M
참고: 스토리지가 휘발성인 경우 Runtime*
vars가 아닌 System*
vars를 사용합니다.
새로고침하고 다시 시작하세요.
sudo systemctl daemon-reload
sudo systemctl restart myapp # maybe this is not necessary? Lmk if you find out
원천:https://wiki.archlinux.org/title/Systemd/Journal#Per_unit_size_limit_by_a_journal_namespace
답변2
서비스에 대한 로깅을 비활성화하지만 여전히 다른 syslog 데몬(예: rsyslog)으로 전달할 수 있는 systemd 구성은 없습니다. 사용자 정의 C++ 프로그램에서 내가 본 것은 로깅을 우회하고 대신 rsyslog가 모니터링하는 소켓에 대한 직접 연결을 여는 것입니다 /run/systemd/journal/syslog
.
답변3
모든아치 리눅스 위키: Systemd/journals:
Arch Linux에서 /var/log/journal/ 디렉토리는 systemd 패키지의 일부이며 로그(/etc/systemd/journald.conf의 Storage=가 auto로 설정된 경우)는 /var/log/journal에 기록됩니다. /. 디렉터리가 삭제되면 systemd는 해당 디렉터리를 자동으로 다시 생성하지 않고 대신 비영구적인 방식으로 해당 저널을 /run/systemd/journal에 씁니다. 그러나 Journald.conf에 Storage=pertant를 추가하고 systemd-journald.service를 다시 시작하거나 시스템을 재부팅하면 디렉터리가 다시 생성됩니다.
따라서 사용자가 해야 할 일은 /var/log/journal(또는 로그가 저장되는 위치)의 이름을 바꾸는 것뿐입니다. 그러면 저널은 디스크에 아무 것도 쓰지 않습니다. 데스크탑이 빠르지만 이 동작으로 인해 종종 문제가 발생합니다. 로그가 디스크에 기록될 때까지 기다려야 합니다. :)