fix(service): move StartLimit* to [Unit] so the restart limit applies

StartLimitInterval and StartLimitBurst were set under [Service], where
systemd 230 and later ignore them — they moved to [Unit] in 2016. The
unit silently fell back to the system defaults of 5 starts in 10 s, and
because RestartSec=10 spaces attempts further apart than that window,
the limiter could never trip: a bot that could not reach its radio
restarted every 10 seconds indefinitely instead of stopping in failed
state.

Moved to [Unit] as StartLimitIntervalSec=60 / StartLimitBurst=3, the
values the file already declared. Applied to both the shipped unit and
the one generated for the .deb, which had drifted the same way.
This commit is contained in:
agessaman
2026-08-07 13:44:42 -07:00
parent 1fb0dbb72b
commit 43961be949
2 changed files with 12 additions and 6 deletions
+6 -4
View File
@@ -4,6 +4,12 @@ Documentation=https://github.com/agessaman/meshcore-bot
After=network.target
Wants=network.target
# Restart policy. These belong in [Unit], not [Service] — systemd 230 moved them,
# and it silently ignores them anywhere else. Give up after 3 starts in 60 s so a
# bot that cannot reach its radio lands in `failed` instead of looping forever.
StartLimitIntervalSec=60
StartLimitBurst=3
[Service]
Type=simple
User=meshcore
@@ -42,9 +48,5 @@ LimitNOFILE=65536
MemoryMax=1G
CPUQuota=200%
# Restart policy
StartLimitInterval=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
+6 -2
View File
@@ -109,6 +109,12 @@ Documentation=https://github.com/agessaman/meshcore-bot
After=network.target
Wants=network.target
# Restart policy. These belong in [Unit], not [Service] — systemd 230 moved them,
# and it silently ignores them anywhere else. Give up after 3 starts in 60 s so a
# bot that cannot reach its radio lands in `failed` instead of looping forever.
StartLimitIntervalSec=60
StartLimitBurst=3
[Service]
Type=simple
User=meshcore
@@ -140,8 +146,6 @@ ReadWritePaths=/var/lib/meshcore-bot
LimitNOFILE=65536
MemoryMax=1G
CPUQuota=200%
StartLimitInterval=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target