我正在运行一个处理特定目录中文件的守护进程。我想一一处理。所以我的想法是我将在守护进程目录中逐个复制文件,并尾随其日志,当日志文件首先完成处理时,第二个文件应该复制到守护进程目录,即日志文件停止更新。
我怎样才能做到这一点?说
daemon_dir=/var/daemon_dir/
daemon_log_file=/var/daemon/daemon_log
我有 5 个文件要处理,即文件 {1..5}
# ls -1
file1
file2
file3
file4
file5
所以我的循环应该按原样进行。
for file in file{1..5}
do
cp ${file} ${daemon_dir}
# daemon sees new file arriving in its dir, & starts processing
# log is tailed
tail -f ${daemon_log_file}
# when log file stops updating say for 1minute or specified time, tail quits
done
并且循环从下一个文件开始。
使用
zsh
而不是bash
,您可以执行以下操作:(
zselect -t 100
休眠 1 秒。就像内置的sleep 1
except 。通常还会每秒检查文件中的新输入(尽管在 Linux 上,一些实现使用 inotify 代替检测传入的输入))。zselect
tail -f
上面,我们使用
mm-1
( odifiedm
less than 1m
inute ago) glob 限定符来检测守护进程何时完成处理文件。如果在 Linux 上,您可以监视
IN_CLOSE_NOWRITE
文件上的 inotify 事件,假设守护程序仅打开输入文件一次(并且是唯一打开它的文件)并且需要足够的时间来处理文件,因此我们有时间设置手表对于
tail -f
基于 - 的方法,您可以(使用 zsh)执行以下操作: