Why isn't systemd restarting this service that has Restart=always?

Solution 1:

When the init.d script doesn't specify a PID file, its autogenerated unit has RemainAfterExit=yes. In most cases such scripts represent oneshot tasks which don't have a long-running process, so this option makes such units show up as 'active' even after the process exits.

This allows the admin to 'stop' such a unit manually (e.g. "starting" /etc/init.d/iptables load firewall rules, and "stopping" it would flush them). However, since the unit is always 'active', it means the restart logic will never trigger. (After all, there is nothing to restart.)

The solution here would be to write a native systemd .service file for CrashPlan – or at least make the daemon produce a pidfile and add # pidfile: /run/... to the initscript accordingly.

...Alternatively, first run systemctl cat crashplan.service to see the full unit contents, then manually undo all the wrong parameters: RemainAfterExit, GuessMainPID, and so on.

See also commit f87883039 and file sysv-generator.c line 197.