Probably not a popular opinion in a systemd world (and being responsible for a lot of critical systems where things don't change much but absolutely have to work every day), the nice thing about sysv is all you need to know a little bit about shell commands and every day is groundhog day (i.e. not getting any calls because X has broken after touching Y). Not great for companies selling support, but great for those selling high-rel.
I agree; not so much that I've found systemd to be unreliable, so much as that it is far more opaque than even the most involved SXX/KXX SysV shell script; I can debug a shell script, but when systemd does do something unexpected, it's utterly inscrutiable.
I will take the opposite opinion. I think that systemd overall reduces the quantity, or surface area, for bugs by making many standard types of service requirements for dependencies, restarting, etc. simple configuration options.
Right but you never see what it's actually doing like you do with sysv. You have a high-level description of what you want to happen and when it messes up (invariably at 3am, invariably on a mission-critical system) you're completely in the dark about what it's trying to do. You can (and people do) mitigate this by just writing imperative startup scripts that systemd calls, but then that leaves the question of what the point is.
Managing services and dependencies and orchestrating all of that is the point. That orchestration “boilerplate” has to be correct and you can reasonably know that it is with a program made for that. If you mess up your service’s config, the problem will be local (your service won’t start), while without a declarative stance your whole system would be in an inconsistent state.
Wait, no; you're describing the exact opposite of what happens. If a sysv init script gets messed up that service fails and the system trundles on. When a unit file is wrong the whole server just sits there refusing to do anything while it waits for 30 seconds, them 90, then 120...
OpenRC is closer to systemd than sysv in that regard, though at least it logs sanely
> while it waits for 30 seconds, them 90, then 120...
That depends on how it’s configured, but that is the correct behavior under the given config. You can specify timeouts, or what depends on what and most of it is sane.
For example, what would be the logical thing to do with a server that has no internet connection? You can only wait for that.
You can debug a shellscript, but can you debug the complex orchestration of many of them with a stateful and error-prone hardware system beneath it is responsible for upbringing? It can’t even log during the early boot phase, while systemd has that solved as well.
And more importantly SysV literally consists of the shell commands that get run, which is a huge win for debugging. The more declarative systems all themselves eventually turn into a bunch of imperative exec calls, but you can't see them (runit may be the closest to keeping the visibility of sysv). And, I mean, I really love GNU shepherd but at 3am with a boss yelling at me I really just want the actual shell commands being run.
Except that you will get that 3am call every night with such a system, while systemd can actually handle failures properly with proper retry strategies, no concurrency problems, etc. And any failure will be local to a service, not the whole system state.
I mean, no? I spend a lot more time fixing init problems now than I did 15 years ago. It keeps me employed, so yay, but it's just annoying to have consistent problems I didn't previously have.