是否可以使用 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