systemd Unit File Validator
Paste a .service, .timer, .socket, or .mount file and check it for syntax errors, missing directives, and common mistakes.
Client-side only — nothing leaves your browser
Paste a systemd unit file on the left to see validation results.
What this validator checks
The validator parses your unit file as INI and runs a series of structural and semantic checks against the rules described in systemd.unit(5), systemd.service(5), systemd.timer(5), systemd.socket(5), and systemd.mount(5). Every check runs locally in your browser — your unit file never leaves the page.
- Detects the unit type (.service, .timer, .socket, .mount) from section headers and directives
- Flags lines without an
=sign and directives outside any section - Verifies required sections per type (e.g.
[Service],[Timer],[Mount]) - Checks that
ExecStartuses an absolute path (systemd does not consult PATH) - Validates allowed values for
Type,Restart,KillMode,StandardOutput, andStandardError - Sanity-checks
OnCalendar=expressions for timer units - Warns when
[Install]is missing or has noWantedBy=— needed forsystemctl enable - Flags unknown directives and unknown section headers (typos like
Restar=always)
Common systemd unit file mistakes
| Mistake | What goes wrong |
|---|---|
| ExecStart=node app.js | Relative command — fails with status=203/EXEC. Use the absolute path: /usr/bin/node. |
| Description My App | Missing =. Every directive must be Key=Value. |
| Restart=sometimes | Invalid Restart value. Allowed: no, always, on-success, on-failure, on-abnormal, on-watchdog, on-abort. |
| No [Install] section | systemctl enable is a no-op. Add [Install] with WantedBy=multi-user.target. |
| Type=forking, no PIDFile= | systemd cannot reliably track which child is the main process — service may be marked failed. |
| OnCalendar=every 5 min | Wrong syntax. Use *:0/5 or *-*-* *:0/5:00. |
| Multiple ExecStart= | Only allowed for Type=oneshot. Other types accept exactly one ExecStart=. |
| StandardOutput=jurnal | Typo — should be journal. Other valid values: null, inherit, file:/path, append:/path. |
Using systemd-analyze verify locally
This tool catches the most common authoring mistakes, but systemd ships its own native validator. Once your unit is in place, you can verify it against the running systemd's full schema:
systemd-analyze verify /etc/systemd/system/myapp.servicesystemd-analyze verify loads the unit, resolves its dependencies, and prints any issues without actually starting it. Combine it with systemctl daemon-reload after every edit and systemctl status myapp.service to inspect the live state.
Frequently Asked Questions
Where are systemd unit files stored on Linux?
Do systemd unit files need to be executable?
What is the difference between Type=simple, forking, oneshot, and notify?
Why does my service need an [Install] section with WantedBy?
What does status=203/EXEC mean when my service fails?
Related Tools
Need to manage SSH connections?
SSH Workbench lets you connect, browse files, and manage servers visually.
Try SSH Workbench Free