cron 日志显示旧的 cron 作业正在执行?

cron 日志显示旧的 cron 作业正在执行?

我正在运行一个测试脚本,其中在 800 个循环中,两个 crontab 脚本在 5 秒的时间内创建新的 crontab。

例如。

while [ "$counter" -lt 800 ]; do
    crontab -r
    create_crontab_1.sh >> cr_log.log
    sleep 5;
    create_crontab_2.sh>> cr_log.log
    (( counter++ ))
done

现在

create_crontab_1.sh->
CRONLINE="*/2 * * * * /scratch/test1.sh >/dev/null 2>&1"
( crontab -l 2>/dev/null ; echo "${CRONLINE}" ) | crontab -

create_crontab_2.sh->
crontab cron_file.txt

cron_file.txt ->
* * * * * 睡眠 2; /scratch/test3.sh >/dev/null 2>&1
* * * * * 睡眠 3; /scratch/test4.sh >/dev/null 2>&1

/var/log/cron 日志:

crond[25583]: (用户名) RELOAD (/var/spool/cron/)
CROND[29339]: (root) CMD (sleep 3; /abc/test3.sh >/dev/null 2>&1)
CROND[29340] : (root) CMD (sleep 2; /abc/test4.sh >/dev/null 2>&1)
crontab[29345]: (用户名) LIST ()
CROND[29353]: (用户名) CMD (/abc/test1. sh >/dev/null 2>&1)
crontab[29365]: (用户名) REPLACE ()

即使带有 test1.sh 的 crontab 在 5 秒内被覆盖,为什么 test1.sh 出现在 cron 日志中,并且可以看到每 2 分钟调用一次(因为它计划每 2 分钟运行一次)?另外,它与CPU时钟有什么关系吗?

答案1

如果我们查看循环内的命令,并对它们进行一些重新排序,重复部分如下:

while ... do
    create_crontab_2.sh >> cr_log.log
    (( counter++ ))
    crontab -r
    create_crontab_1.sh >> cr_log.log
    sleep 5;
done  

create_crontab_2.sh编辑 的操作将被crontab以下操作撤消crontab -rcreate_crontab_1.sh睡眠期间只有 crontab 中设置的内容存在。由于更改 crontab 的速度可能很快,因此不太可能cron会看到create_crontab_2.sh几乎所有设置的规则。

相关内容