我有一个运行 Debian Jessie 的 Raspberry Pi。
当我旅行时,Pi 充当 VPN 网关。
我有一个监控脚本 - python - 当触发时,它会生成已连接客户端的列表,并通过 MQTT 将该列表发送到我的网络监控计算机。这一切都很完美。每次启动脚本时,它都会运行,并且我可以看到 MQTT 链“另一端”的客户端列表。客户端列表包括来自 VPN 计算机的时间戳,该时间戳显示何时触发它提供报告。
我还配置了一个 Systemd 服务文件,以便我可以自动触发此脚本。这是我的服务文件 - 'vpnmon.service':
[单元] 说明=VPN 监控脚本 [服务] 类型=简单 ExecStart=/usr/bin/python /home/nick/lib/checkusers.py
这是由 systemd 计时器“vpnmon.timer”触发的:
[单元] 描述=每五秒运行一次 vpnmon 脚本 [定时器] OnBootSec=10s 单位=vpnmon.service OnUnitInactiveSec=5s [安装] WantedBy=多用户.target
这完成了所有“工作”。
但该脚本似乎没有定期触发。有时是 10 秒,有时是 15 秒,有时是 20 秒——有时会经过整整一分钟才被触发。
所以我输入以下内容来查询服务状态:
systemctl 状态 vpnmon.service
我得到了一个很好的结果:
● vpnmon.service - VPN 监控脚本 已加载:已加载(/lib/systemd/system/vpnmon.service;静态) 活跃:自 UTC 2017-09-28 星期四 09:52:01 起不活跃(死亡); 1秒前 进程:1138 ExecStart = / usr / bin / python / home / nick / lib / checkusers.py(代码=退出,状态= 0 / SUCCESS) 主 PID:1138(代码=退出,状态=0/成功)
在这样做的过程中,我注意到一件奇怪的事情。如果我反复查询状态,我会不断获得良好的结果,并且我注意到,像这样通过命令行查询服务状态的行为会导致脚本在预期时准确触发,即每隔 5 秒触发一次......
查询 systemd 服务状态的行为中有什么可能导致明显的间歇性触发消失??
这是类似于 Python 的“缓冲”吗?当您使用脚本将内容写入文件时?
答案1
拉曼 - 谢谢!搞定了。
我将以下内容添加到 vpnmon.timer:
准确度秒=1us
现在效果很好。
该设置的详细信息如下:
https://www.freedesktop.org/software/systemd/man/systemd.timer.html#AccuracySec=
谢谢。