You're not alone. For most of my career, I've only used Linux to develop software and deploy that software to production. That usually means webservers, databases, iptables/netfilter, and all the other backend processes that glue that together.
Before systemd, I was using sysVInit. Let me say that systemd has been head-and-shoulders above the previous experience in a variety of ways, with a host of built-in features:
- Predictable start-up order of processes
- Configurable inter-process dependencies (for the above)
- Restart on fail
- PID management
- Socket management
- Standard config format (no more copy-pasta init scripts)
- Clearly defined filesystem areas for package managed and user-managed services
- Clearly defined layering of config areas (e.g.
systemctl status <service>shows you exactly what files are loaded) - Solid CLI experience that provides detailed information about every managed service
Bottom line: it's dead simple to add your own stuff, and just as simple to read what packaged software is doing. I also think that using a CLI (instead of poking around /var/run and ps output) is a step up in terms of system administration, given how complex all this can get.
My only contention is the forced use of journald, where my preference would be to use the standard /var/log paradigm for all this, rather than have a doorman to a binary logging database. You can configure it to emit text logs, but that's not the system of record for logging - just a feed.
All that said, container-based solutions have rendered both init systems irrelevant a lot of the time, with tools like Kubernetes providing just about all of the same features. Moreover, cloud solutions tend to lean into cloud-init for host startup configuration and management anyway.