Вы можете использовать сторожевой таймер для сервисов:
Секунда сторожевого таймера=
Настраивает тайм-аут сторожевого таймера для службы. Сторожевой таймер активируется после завершения запуска. Служба должна регулярно вызывать sd_notify(3) с параметром "WATCHDOG=1" (т. е. "поддерживающий пинг"). Если время между двумя такими вызовами превышает настроенное время, то служба переходит в состояние сбоя и завершается сигналом SIGABRT (или сигналом, указанным WatchdogSignal=). Установив для Restart= значение «при сбое», «при сторожевом таймере», «ненормально» или «всегда», служба будет автоматически перезапущена. Настроенное здесь время будет передано исполняемому сервисному процессу в переменной окружения WATCHDOG_USEC=. Это позволяет демонам автоматически включать логику проверки активности, если для службы включена поддержка сторожевого таймера. Если используется этот параметр, необходимо установить NotifyAccess= (см. ниже), чтобы открыть доступ к сокету уведомлений, предоставляемому systemd. Если NotifyAccess= не установлен, он будет неявно установлен в main. По умолчанию 0, что отключает эту функцию. Служба может проверить, ожидает ли диспетчер службы уведомлений о проверке активности сторожевого таймера. Подробности смотрите в sd_watchdog_enabled(3). sd_event_set_watchdog(3) может использоваться для включения поддержки автоматических уведомлений сторожевого таймера.
вы можете найти много примеров в Интернете.