我正在尝试编写一个捕获退出信号并终止的脚本。我不想使用通常的 bash 陷阱方法,而是希望每 10 秒监视一次文件创建,并在终止之前清理一些内容。
这是我尝试过的:
poll_time=10 // poll every 10 seconds
((term_time=$SECONDS+240)) // monitor until 4 min from current script time exec
while (( $SECONDS < $term_time)) do
if [[ -r $some_path/file.txt ]]; then
cleanup_function
exit
fi
sleep ${poll_time}
done
//if file doesnt exit continue with below code
//blah blah blah ....
有一个更好的方法吗?上面的代码行可以工作吗?
答案1
inotifywait
frominotify-tools
是你需要的(至少看看)。像这样的行将执行您的脚本想要执行的相同操作:
inotifywait -e create --timeout 240 "${some_path}/file.txt" && { cleanup_function; exit ; }
区别inotifywait
在于以基于事件的方式工作,因此不需要轮询或休眠。