使用 watch 命令(或其他方法)在文件更改时停止服务

使用 watch 命令(或其他方法)在文件更改时停止服务

当 failed.log 文件发生更改时,我需要停止服务。我正在查看 watch 命令以执行此操作: watch -d -g -t 'ls -l /home/username/*failed.log' 此命令将检查输出是否已ls更改。如果已更改,我希望它停止 CUPS 服务。

我正在研究inotify-tools,但这对我来说有点太复杂了。有什么建议吗?

答案1

如何通过 连接两个命令&&?这将确保在执行第二部分之前,第一个命令成功退出,代码0等于truein bash。如果是真的,则执行第二部分,并停止 cups 服务。

watch -d -g -t ls -l /home/username/*failed.log && service cups stop

答案2

我有一个类似的使用场景可能会对您有所帮助,具体取决于日志文件的内容。

我在工作中有一个 OpenVPN 服务器。当我需要重新启动以应用更新但我有当前用户会话时,我会设置一个 while 循环来检查特定grep模式,("虚拟专用网络用户名瓦尼普时间戳“)。如果找到了模式,我会等待一段时间;否则,如果找不到模式(非零退出代码),我会重新启动。

这对我的服务器来说非常具体,但您可以调整 grep 语句以满足您的需要。

while [ 1 ] ; do 
    if egrep '10.8.0.[0-9]+,[a-zA-Z\-]+,[0-9\.]{7,15}:[0-9]+,(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) +[0-9]{1,2} [0-9:]{8} [0-9]{4}' /ramdisk/openvpn-status.log ; then 
        echo someone still connected ;
        sleep 30s ; 
    else 
        echo reboot now ; 
    fi ; 
done

上面的例子是echo reboot now因为我现在不想重新启动,但是你明白我的意思了。

SSH 会话,等待重启

相关内容