【发布时间】:2019-07-08 15:16:23
【问题描述】:
我有一个 bash 脚本,有时会发生这种情况,即使我的脚本被安排了,它也被执行了两次。所以我添加了几行代码来检查脚本是否已经在执行。刚开始没问题,最近三天又出现问题了
PID=`echo $$`
PROCESS=${SL_ROOT_FOLDER}/xxx/xxx/xxx_xxx_$PID.txt
ps auxww | grep $scriptToVerify | grep -v $$ | grep -v grep > $PROCESS
num_proc=`awk -v RS='\n' 'END{print NR}' $PROCESS`
if [ $num_proc -gt 1 ];
then
sl_log "---------------------------Warning---------------------------"
sl_log "$scriptToVerify already executed"
sl_log "num proc $num_proc"
sl_log "--------"
sl_log $PROCESS
sl_log "--------"
exit 0;
fi
通过这种方式,我检查了我的日志中有多少行,如果结果多于一个,那么我有两个正在执行的进程,一个将被停止。 但是,此方法无法正常工作。如何修复我的代码以检查我有多少正在执行的脚本?
【问题讨论】:
-
为什么不创建临时文件并处理,因为它是信号量?
-
什么是调度它?
-
@chepner 我已经安排好了脚本开始的时间。每天在同一时间执行我的脚本
-
如果您正确配置了调度程序(cron 或任何您使用的),则不会发生这种情况。我建议您解决根本原因,而不是添加花里胡哨。
-
@AndrejsCainikovs 不幸的是,我不是管理调度程序的人,我无法对其进行操作。我唯一的选择是预测潜在的错误并修复它