Ubuntu 16.04 - 使用 watch 命令检查文件输出并停止服务

Ubuntu 16.04 - 使用 watch 命令检查文件输出并停止服务

是否可以使用 watch 命令查看文件是否存在,如果存在则停止服务?或者作为一种解决方法,检查文件的内容然后停止服务?

我正在查看 watch 命令来执行此操作:

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

对我来说,问题在于我完全不理解这个命令。我认为它在这里检查输出“ls”,但它检查“ls”是为了什么?我需要命令检查“twitter-failed.log”是否有任何类型的内容。当没有错误时,文件是空白的,但当有错误时,会生成一大堆文本。因此,watch 命令只需要检查文件是否有任何类型的输出,然后停止服务。

答案1

您可以使用inotifywait

将以下内容放入 bash 脚本并使其可执行。

#!/bin/bash

set -e # make script exit on error

FILE_TO_WATCH="/home/username/twitter-failed.log"

# Truncate / Create empty file
> "$FILE_TO_WATCH"

# Wait for File was modified
inotifywait -e modify "$FILE_TO_WATCH"

# Do something after modified
service cups stop
send_yourself_a_notification

或者,您也可以使用像这样的循环,但我认为最好使用专门的工具来inotifywait执行此操作:

until [ -s "$FILE_TO_WATCH" ]; do sleep 2; done && service cups stop

相关内容