システム的に不規則なタイミング問題

システム的に不規則なタイミング問題

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=

ありがとうございます。

関連情報