我有一个每2分钟运行一次的脚本,查看文件夹并检查是否已传送新文件 问题是,有时脚本会在复制文件期间启动(文件非常大),因此会向客户发送一封电子邮件,其中"文件x为空"但当然文件很好。之后会收到正确的留言电邮。
为了避免不同处理之间的重叠,我已经设置了这样的CRON_RUN文件。如果有正在处理的文件,则我的脚本退出。当程序完成时,CRON_RUN文件被删除,以便当然存在时允许启动下一个进程
现在处理不再重叠,但我观察到了 如果我在输入中传递文件,并且在复制过程中我开始处理,程序会识别一个EMPTY文件,因此它仍然不是预期的。
是否有像?:
这样的命令 if copy process is in run or checksum file is not completed then
exit
else
do my program
fi
目前我目前的实施是:
#!/bin/bash
MYDIR=`dirname $0`
ext_dir="/server/oracle/apps/delivery"
if test -f $ext_dir/CRON_RUN
then
echo $0 CRON RUN >&2
exit 1
fi
touch $ext_dir/CRON_RUN
export CRON_RUN=CRON_RUN
for......
my program....
export CRON_RUN=""
rm -f $ext_dir/CRON_RUN
如果我正确理解如何使用flock
命令,请告诉我吗?
#!/bin/bash
MYDIR=`dirname $0`
ext_dir="/server/oracle/apps/delivery"
if test -f $ext_dir/CRON_RUN
then
echo $0 CRON RUN >&2
exit 1
fi
touch $ext_dir/CRON_RUN
export CRON_RUN=CRON_RUN
#running the program for each input folder
#inside the input some files might be in copying
#if a process copying is in progress program should exit
# if not then the load-input script should start
for input_folder in electro food comp rof
do
(
# Wait for lock on /server/oracle/apps/delivery/$input_folder/.load-input.exclusivelock(fd 200) for 10 seconds
flock -x -w 10 200 || exit 1
# Do stuff
$MYDIR/load-input $input_folder $mylog > $mylog 2>&1
) 200>/server/oracle/apps/delivery/$input_folder/.load-input.exclusivelock
done
export CRON_RUN=""
rm -f $ext_dir/CRON_RUN