当文件在一段时间内未被修改时,如何重新启动 systemd 服务?

当文件在一段时间内未被修改时,如何重新启动 systemd 服务?

我的设置有一个 systemd 服务,它应该定期写入文件。我想监视文件的变化,这样当文件一段时间没有修改时,我就知道服务出了问题。我希望能够在发生这种情况时自动重新启动服务。

我尝试过使用小路单元文件,但它只能在监视的文件发生变化时启动命令,而不能相反。

相反的问题有人问过,当文件发生变化时需要重新启动服务吗,但解决方案似乎并不直接适用于我的情况。

答案1

虽然评论答案确实提出了一个很好的观点,即在处理此类问题时应该把精力集中在哪里(调试并尝试确定为什么它会挂起?),但你的问题的一个可能的解决方案可能是设置一个systemd-定时器它会以您想要检查该文件的任何时间间隔触发,并运行执行测试和操作的脚本。可能类似于(如果您使用 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

请注意,我还没有测试过这一点,因此可能需要进行一些调整。

相关内容