python-journald-rsyslog가 로그 쓰기를 일괄/지연하는 것처럼 보이는 이유는 무엇입니까?

python-journald-rsyslog가 로그 쓰기를 일괄/지연하는 것처럼 보이는 이유는 무엇입니까?

Python 스크립트 출력을 기록하려고 합니다. 다음은 다음과 같습니다.

arm@stackoverflow > cat test.py
#!/usr/bin/python
from time import sleep
while True:
        print("Hello")
        sleep(1)

로그를 처리하기 위해 표준 syslog 방식을 사용하려고 시도했기 때문에 모든 것을 다음과 같이 보내도록 JournalD 및 SystemD를 구성하려고했습니다 Syslog.

arm@stackoverflow > cat /etc/systemd/journald.conf | grep -vP "^#"
[Journal]
ForwardToSyslog=yes

arm@stackoverflow > cat /etc/systemd/system/testservice.service
[Unit]
Description="Test service"
StartLimitIntervalSec=500
StartLimitBurst=10

[Service]
Type=Simple
Restart=on-failure
RestartSec=5s
ExecStart=/home/pi/test.py
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=testservice
   
[Install]
WantedBy=multi-user.target

마지막으로 Debian의 기본 Rsyslog를 사용하여 로그를 일부 파일로 라우팅합니다.

arm@stackoverflow > tail -n1 /etc/rsyslog.conf
if $programname == 'testservice' then /var/log/testservice.log
arm@stackoverflow > sudo touch /var/log/testservice.log && sudo chmod a+rw /var/log

그러나 전체를 시작하면 모든 로그가 어딘가에 막힌 것처럼 보이며 시작 후 1시간 후에 릴리스됩니다(예: 큰 디스풀).

arm@stackoverflow > sudo systemctl start testservice.service && sleep 30

그 다음에:

arm@stackoverflow > tail /var/log/testservice.log #nothing

테스트:

arm@stackoverflow > sudo systemctl status testservice.service
● testservice.service - "Test service"
     Loaded: loaded (/etc/systemd/system/testservice.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-02-21 09:20:06 CET; 1min 33s ago
arm@stackoverflow > ps aux | grep test
root     23488  0.0  0.6  13956  5968 ?        Ss   09:20   0:00 /usr/bin/python /home/pi/test.py

이러한 로그를 실시간으로 가져오는 방법을 알고 있나요?

기타 라즈베리파이 OS(ARM)의 테스트 서버입니다.

답변1

@meuh 덕분에 -uPython 스크립트에 플래그를 추가하는 것이 성공했습니다. 나는 그것을 shebang 줄에 추가했습니다.

#!/usr/bin/python -u

관련 정보