В моей настройке есть служба systemd, которая должна периодически записывать в файл. Я хотел бы отслеживать изменения в файле, поэтому, когда он какое-то время не менялся, я знаю, что служба вышла из строя. Я хотел бы иметь возможность автоматически перезапускать службу, когда это произойдет.
Я пробовал использовать дорожка unit, но он может запускать команду только при изменении отслеживаемого файла, а не наоборот.
Обратный вопрос Был задан вопрос, где нужно перезапустить службу после изменения файла, но решение, похоже, не применимо напрямую к моей ситуации.
Хотя ответ на комментарий действительно поднимает хороший вопрос о том, на чем следует сосредоточить свою энергию при решении такой проблемы (отладить и попытаться определить, почему он может зависать?), Возможным решением вашего вопроса может быть настройка а systemd-timer который запускается с любым интервалом, с которым вы хотите проверить этот файл, и запускать скрипт, который выполняет ваши тесты и действия. Может быть, что-то вроде (если вы используете 1 час в качестве интервала):
Таймер
[~]# cat /etc/systemd/system/checkhung.timer
[Unit]
Description=Check if file not modified in a while and restart service
[Timer]
OnActiveSec=60min
OnUnitActiveSec=60min
обслуживание
[~]# cat /etc/systemd/system/checkhung.service
[Unit]
Description=Check if file not modified in a while and restart service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/checker.sh
Сценарий
[~]# cat /usr/local/bin/checker.sh
#!/bin/bash
if [[ $(find /path/to/the/file.txt -mmin +60) ]]
then
/usr/bin/systemctl restart my-service.service
fi
Обратите внимание, что я не тестировал это, поэтому может потребоваться некоторая настройка.