File: //lib/systemd/system/libcare.service
[Unit]
Description=LibCare patch server
[Service]
ExecStartPre=/usr/bin/kcarectl --has-flags libcare-enabled
ExecStart=/usr/libexec/kcare/libcare-server -v -o /var/log/libcare/server.log -S &3
SuccessExitStatus=143
# Only send `stop` when the server is still running (MAINPID is set).
# If the server already terminated on its own, MAINPID is unset and we must
# not connect through the socket: that would trigger socket activation,
# start a new instance, which receives `stop` and exits, causing a loop.
# Use if/fi instead of && to return 0 when skipping, so systemd does not
# mark the service as "failed".
ExecStop=/bin/sh -c 'if test "$${MAINPID:-x}" != x; then echo "ExecStop: sending stop to MAINPID=$$MAINPID"; LIBCARE_CLIENT_TIMEOUT=10 /usr/libexec/kcare/libcare-client stop; else echo "ExecStop: server already exited, skipping stop (MAINPID=$$MAINPID)"; fi'