我有一个场景,文件将在11:30到11:40之间的任何时间到达。我可以安排一个脚本运行,从11:30开始检查文件是否已到达。这就是我和我的关系。
i=0
while [ i -eq 0 ]
do
if [ ! -f $File_Check_Dir/$FILE_NAME ] ; then
echo " \n File has arrived at `date +'%d-%m-%Y %H:%M:%S'****" | tee -a ${LOGFILE}
i=1
fi
done
我可以让脚本在后台运行。但是我需要检查systime并在文件到达美国东部时间11:40之前发送警报。我试过systime函数,但不能完全得到我想要的。
答案 0 :(得分:0)
您可以使用date +"%H:%M"
获得时间,然后您可以再添加一个“if”来检查这是否更大是11:40并在发送适当的通知后退出..
答案 1 :(得分:0)
一种可能的选择:
在你的剧本中:
trap sendMailFunction SIGUSR1
sendMailFunction(){
.
. # Enter your code here, which will send mail in case the file does not arrive in time
.
}
.
. # Remainder of the script....
&安培;在11:30 timeout
下运行(根据您的要求使用at
或cron
。)
timeout -s SIGUSR1 10m /path/to/myscript.sh arg1 arg2 arg3 ...
答案 2 :(得分:0)
有几种建议的方法:
如果在具有inotify支持的系统上运行,请使用inotifywait
(来自Debian inotify-tools
程序包)等工具立即通知您所监视目录/文件的更改。如果在指定的超时期限内未执行任何操作,则可以使用-t
选项超时。如果使用此工具,您可能必须在检查shell脚本中是否存在文件与运行inotifywait
命令之间处理竞争条件。
使用timeout
命令包装脚本。例如。 timeout 10m my-watch-script
。如果在脚本退出之前发生超时,则timeout
将返回退出代码124,然后您可以测试该代码以确定是否发生了超时,或者是否找到了文件。
如果使用bash,请测试内置SECONDS
变量作为循环条件的一部分,并在计时器到期时退出。如果bash不可用,则替代方法是使用date
命令,并以秒为单位格式化输出。请参阅this answer。
目前,所呈现的代码在非常紧密的轮询循环中运行。在某处放置sleep
是个好主意。