Fast status pass
systemctl status app.service— check unit state and last log linessystemctl list-dependencies app.service— ensure wants/requires are presentsystemctl cat app.service— confirm the shipped unitsystemctl show app.service -p FragmentPath,User,Group,ExecStart,Environment— verify runtime props
Logs to inspect
journalctl -u app.service -b -n 50— last 50 lines this bootjournalctl -u app.service --since "20 min ago"— recent errorsjournalctl -xe— broader context for recent issues
Common pitfalls
Permissions
- ExecStart path missing execute bit.
- WorkingDirectory not readable by service user.
- Files written to directories without correct ownership.
Environment
- Missing
EnvironmentFile=contents; confirm withsystemctl show -p EnvironmentFiles. - Wrong
PATHwhen using binaries from custom prefixes.
Networking
- Port already bound: check
ss -tulpn | grep :PORT. - Dependency order: add
After=network-online.targetand ensuresystemd-networkd-wait-online.serviceis enabled if needed.
Restart safely
systemctl daemon-reloadafter unit edits.systemctl restart app.serviceand watchjournalctl -fu app.service.- Use
systemctl revert app.serviceto drop overrides.
Escalation notes
Capture:
- Exact failure timestamp.
- Unit file (including drop-ins).
- Relevant journal excerpt.
- Recent config diff or deployment notes.