30초마다 실행되는 서비스가 있습니다. 이 서비스의 systemd 타이머 파일은 다음과 같습니다.
~# cat /etc/systemd/system/speed_check.timer
[Unit]
Description="Check device speed"
[Timer]
OnBootSec=1
OnUnitActiveSec=30
[Install]
WantedBy=multi-user.target
서비스 파일은 단순히 Python 스크립트를 호출합니다.
# cat /etc/systemd/system/speed_check.service
[Unit]
Description=Check device speed
[Service]
Type=simple
ExecStart=/usr/bin/check-speed
30초마다 systemd가 서비스를 시작하면 두 개의 로그가 인쇄됩니다.
Jan 8 17:54:23 localhost systemd[1]: Starting Check device speed...
Jan 8 17:54:23 localhost systemd[1]: Started Check device speed.
이러한 메시지를 억제할 수 있는 방법이 있습니까? 그들이 내 시스템 로그를 채우고 있어요!
감사해요
답변1
여러 가지 가능성이 있습니다. 이 파일을 구성해야 합니다./etc/systemd/journald.conf. 맨 페이지의 두 가지 관련 옵션은 다음과 같습니다.
RateLimitInterval=, RateLimitBurst=
Configures the rate limiting that is applied to all messages generated on the system. If, in the time interval defined by RateLimitInterval=, more messages than specified in RateLimitBurst= are logged by a service, all further messages within the interval are dropped until the interval is over. A message about the number of dropped messages is generated. This rate limiting is applied per-service, so that two services which log do not interfere with each other's limits. Defaults to 1000 messages in 30s. The time specification for RateLimitInterval= may be specified in the following units: "s", "min", "h", "ms", "us". To turn off any kind of rate limiting, set either value to 0.
그리고
저장 =
Controls where to store journal data. One of "volatile", "persistent", "auto" and "none". If "volatile", journal log data will be stored only in memory, i.e. below the /run/log/journal hierarchy (which is created if needed). If "persistent", data will be stored preferably on disk, i.e. below the /var/log/journal hierarchy (which is created if needed), with a fallback to /run/log/journal (which is created if needed), during early boot and if the disk is not writable. "auto" is similar to "persistent" but the directory /var/log/journal is not created if needed, so that its existence controls where log data goes. "none" turns off all storage, all log data received will be dropped. Forwarding to other targets, such as the console, the kernel log buffer or a syslog daemon will still work however. Defaults to "auto".
따라서 다음을 통해 모든 시스템 로그를 끌 수 있습니다.저장공간=없음, 그러나 이는 과도하고 현명하지 못한 것 같습니다. 제한 속도(첫 번째 옵션 = 더 합리적입니다. 기본값은 30초당 1000개의 메시지입니다. 이는 예상보다 훨씬 많은 수치이며 선택하지 않은 출력이 그토록 많은 이유를 설명합니다.
또는 다음 옵션 중 하나를 사용할 수 있습니다.
SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize=
저장된 로그 파일의 크기를 제어합니다. 이러한 옵션을 다음 중 하나와 연결할 수 있습니다.
최대 안전 파일 수 =
The maximum time to store entries in a single journal file before rotating to the next one
최대 보존 시간(초) =
The maximum time to store journal entries.
모든 syslog 메시지를 보관하되 더 짧은 기간 동안 보관합니다.
마지막으로 다음을 사용할 수 있습니다.
MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall=
Controls the maximum log level of messages that are stored on disk, forwarded to syslog, kmsg, the console or wall (if that is enabled, see above). As argument, takes one of "emerg", "alert", "crit", "err", "warning", "notice", "info", "debug" or integer values in the range of 0..7 (corresponding to the same levels). Messages equal or below the log level specified are stored/forwarded, messages above are dropped. Defaults to "debug" for MaxLevelStore= and MaxLevelSyslog=, to ensure that the all messages are written to disk and forwarded to syslog. Defaults to "notice" for MaxLevelKMsg=, "info" for MaxLevelConsole= and "emerg" for MaxLevelWall=.
덜 중요한 메시지는 버리고 중요한 메시지만 보관하세요.
답변2
rsyslog 필터를 사용하여 이러한 메시지를 필터링하는 대신 syslogd의 속도를 전체적으로 제한하는 것이 좋습니다.
echo 'if $programname == "systemd" and ($msg contains "Check device speed") then stop' >/etc/rsyslog.d/ignore-systemd-check-speed.conf
systemctl restart rsyslog
답변3
systemd 버전이 240 이상인 경우 systemctl --version
syslog 데몬의 서비스를 호출하거나 syslogd
전역 변경을 수행하지 않고도 stdout 및 stderr을 리디렉션할 수 있습니다. 파일에 speed_check.service
다음 옵션을 추가하세요[Service]
StandardOutput=append:/var/log/speed_check-stdout.log
StandardError=append:/var/log/speed_check-stderr.log
.log
파일이 존재하지 않는 경우 위 구성은 파일을 생성하고 추가 모드에서 엽니다. 서비스가 시작될 때마다 로그를 자르려면 다음 append:
으로 바꾸십시오.file: