当 failed.log 文件发生更改时,我需要停止服务。我正在查看 watch 命令以执行此操作:
watch -d -g -t 'ls -l /home/username/*failed.log'
此命令将检查输出是否已ls
更改。如果已更改,我希望它停止 CUPS 服务。
我正在研究inotify-tools
,但这对我来说有点太复杂了。有什么建议吗?
答案1
如何通过 连接两个命令&&
?这将确保在执行第二部分之前,第一个命令成功退出,代码0
等于true
in 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
因为我现在不想重新启动,但是你明白我的意思了。