[Unit] Description=gps-ntp status dashboard Documentation=https://git.supported.systems/time-pi After=network-online.target gpsd.service chrony.service Wants=network-online.target [Service] Type=exec User=gpsntp Group=gpsntp ExecStart=/opt/gpsntp-dashboard/.venv/bin/gpsntp-dashboard Environment=GPSNTP_PORT=8080 Environment=GPSNTP_HOST=0.0.0.0 Restart=on-failure RestartSec=3 # Keep the dashboard OFF cpu0. The PPS interrupt is handled on cpu0 and cannot # be moved (Pi 4 GPIO IRQs are demuxed through pinctrl-bcm2835 and refuse an # smp_affinity), so any load there directly adds jitter to the timestamp. # Measured: the dashboard cost ~36% more PPS jitter before this. It is a # monitoring tool; it must never perturb the clock it is watching. CPUAffinity=1 Nice=10 # Hardening. NoNewPrivileges is intentionally NOT set: the served-clients # panel shells `sudo -n chronyc -c clients`, allowed by a narrow sudoers rule. PrivateTmp=true ProtectHome=true ProtectControlGroups=true ProtectKernelTunables=true RestrictSUIDSGID=false LockPersonality=true [Install] WantedBy=multi-user.target