시스템적으로 불규칙한 타이밍 문제

시스템적으로 불규칙한 타이밍 문제

Debian Jessie를 실행하는 Raspberry Pi가 있습니다.

여행할 때 Pi는 VPN 게이트웨이 역할을 합니다.

모니터링 스크립트(Python)가 있습니다. 이 스크립트는 트리거되면 연결된 클라이언트 목록을 생성하고 MQTT를 통해 해당 목록을 네트워크 모니터링 컴퓨터로 보냅니다. 모두 완벽해요. 스크립트를 시작할 때마다 스크립트가 실행되고 MQTT 체인의 "다른 쪽 끝"에 있는 클라이언트 목록을 볼 수 있습니다. 클라이언트 목록에는 VPN 컴퓨터가 보고서를 제공하기 위해 트리거된 시기를 보여주는 타임스탬프가 포함되어 있습니다.

또한 이 스크립트를 자동으로 실행할 수 있도록 Systemd 서비스 파일을 구성했습니다. 이것은 내 서비스 파일인 'vpnmon.service'입니다.

[단위]
설명=VPN 모니터링 스크립트

[제공하다]
유형=단순
ExecStart=/usr/bin/python /home/nick/lib/checkusers.py

이는 시스템 타이머 "vpnmon.timer"에 의해 트리거됩니다.

[단위]
Description=5초마다 vpnmon 스크립트를 실행합니다.

[시간제 노동자]
OnBootSec=10초
단위=vpnmon.service
OnUnitInactiveSec=5초

[설치하다]
WantedBy=다중 사용자.대상

이것은 모든 "작업"을 수행합니다.

그러나 스크립트가 정기적으로 실행되지 않는 것 같습니다. 때로는 10초, 때로는 15초, 때로는 20초일 때도 있습니다. 때로는 트리거되기까지 1분이 지나기도 합니다.

그래서 서비스 상태를 쿼리하기 위해 다음을 입력했습니다.

systemctl 상태 vpnmon.service

좋은 결과를 얻었습니다.

● vpnmon.service - VPN 모니터링 스크립트
   로드됨: 로드됨(/lib/systemd/system/vpnmon.service; 정적)
   활성: 2017-09-28 1초 전 목요일 09:52:01 UTC 이후 비활성(죽음);
  프로세스: 1138 ExecStart=/usr/bin/python/home/nick/lib/checkusers.py(코드=EXIT, 상태=0/SUCCESS)
 마스터 PID: 1138(코드=종료, 상태=0/성공)

그렇게 하던 중 이상한 점을 발견했습니다. 상태를 반복적으로 쿼리하면 계속 좋은 결과를 얻을 수 있으며, 이와 같이 명령줄을 통해 서비스 상태를 쿼리하면 스크립트가 예상한 대로 정확하게, 즉 5초마다 실행되는 것을 발견했습니다..... .

명백한 간헐적 트리거가 사라질 수 있는 시스템 서비스 상태 쿼리 동작에 뭔가가 있습니까??

이것은 Python의 "버퍼링"과 같은 것입니까? 스크립트를 사용하여 파일에 콘텐츠를 쓸 때?

답변1

라만 - 고마워요! 그것을 못 박았다.

vpnmon.timer에 다음을 추가했습니다.

정확도 초=1us

지금은 잘 작동합니다.

이 설정의 세부 내용은 다음과 같습니다.

https://www.freedesktop.org/software/systemd/man/systemd.timer.html#AccuracySec=

감사해요.

관련 정보