Build a Simple Linux Configuration Monitor With Python

Overview
In this tutorial we build a minimal monitor on a single Linux host. The same ideas extend to every device in your fleet once an agent reports state centrally.
What We'll Build
- Read systemd unit state
- Detect failures or changes
- Emit a structured event
1import hashlib
2import subprocess
3import time
4from pathlib import Path
5
6CONFIG = Path("/etc/myapp/config.ini")
7
8def unit_active(name: str) -> str:
9 result = subprocess.run(
10 ["systemctl", "is-active", name],
11 capture_output=True,
12 text=True,
13 check=False,
14 )
15 return result.stdout.strip()
16
17def file_hash(path: Path) -> str:
18 return hashlib.sha256(path.read_bytes()).hexdigest()
19
20if __name__ == "__main__":
21 last = file_hash(CONFIG) if CONFIG.exists() else None
22 while True:
23 state = unit_active("nginx")
24 if state != "active":
25 print({"event": "service.degraded", "unit": "nginx", "state": state})
26 current = file_hash(CONFIG) if CONFIG.exists() else None
27 if current != last:
28 print({"event": "config.changed", "path": str(CONFIG)})
29 last = current
30 time.sleep(30)
Why This Matters at Fleet Scale
Each device needs the same watcher logic. Run this on one device and you have a hack. Run it everywhere with centralized events and you have observability.
How EdgeProtocol Helps
EdgeProtocol ships config monitoring without custom scripts per site. Try EdgeProtocol →