The unit you referenced doesn't exist as systemd sees it — typo, missing file, or an unreadable path. One command shows what systemd actually loaded; then it's fixing names and daemon-reload.
systemctl cat <unit> reads the file; 'No such file or directory' means the name or path is wrong (suffix .service matters).
systemd caches unit state. Any file change/add/remove requires: systemctl daemon-reload before start/enable sees it.
The failing unit exists but its [Unit] Requires= names one that doesn't — the error names the missing dependency.
'created a symlink ... disabled anyway' — enable needs [Install] WantedBy=multi-user.target.
systemctl cat <name>.service 2>&1 | head -5 ; systemctl list-units --all | grep -i <part-of-name>
sudo systemctl daemon-reload && sudo systemctl start <name>.service
# in the unit file: [Install]
# WantedBy=multi-user.target then: sudo systemctl daemon-reload && sudo systemctl enable <name>.service
systemctl list-unit-files | grep -iE 'network|docker' # fix the referenced name in [Unit]
Unit files go in /etc/systemd/system (admin) — /usr/lib/systemd/system is the package lane, upgrades can overwrite it. systemd-analyze verify <unit> checks for typos and missing deps before you try to start it.
systemd caches the unit table in memory. Editing files on disk doesn't update that table — start/enable keep using the old definition (or 'not found' for new ones) until daemon-reload runs.
/etc/systemd/system/ — it overrides package units and survives package upgrades. Confirm ownership/permissions (root:root 644) so systemd accepts it.
Our most-documented failures, packaged as ready-to-ship starter kits: Docker, Kubernetes, and Terraform.
Browse the template store →One-time. Yours to modify. Instant download from the NinjaOps template store.