如何确保脚本仅在另一个脚本之后运行

时间:2011-11-30 02:06:52

标签: python bash cron crontab

我有两个以cronjobs运行的python脚本。

ScriptA处理日志文件并将记录插入table,ScriptB使用记录生成报告。

我已安排ScriptA在ScriptB之前运行一小时,但有时ScriptB会在ScriptA完成插入之前运行,从而生成错误的报告。

如何在ScriptA完成后确保ScriptB正确运行?

修改 ScriptA和ScriptB做了很多不同的事情,比如说,一个用于保存用户数据,另一个用于内部使用。在其他地方可能有一些ScriptC取决于ScriptA。

所以我不能只合并这两项工作。

4 个答案:

答案 0 :(得分:7)

创建运行ScriptA然后运行ScriptB的单个cron作业不是更好吗?这样,您可以确保ScriptB在ScriptA完成之前不会运行,并且您不需要修改任何一个脚本。

cronjob可以运行一个简单的shell脚本,如:

#!/bin/sh

python ScriptA.py
python ScriptB.py

编辑:如果您真的无法合并两个cron作业,则可以使用this question中描述的技术等待第一个过程完成。

答案 1 :(得分:2)

一种方法是确保如果这两个工作是单独的cron工作 - 中间有足够的时间来确保工作1的工作。

另一种方法是锁定,正如其他人在此提出的那样,但请注意,cron不会因为锁定而无法完成您的工作。因此,job2必须在睡眠周期中运行,直到它不再看到锁定,或者相反看到作业1完成的标志,或者你必须有创意。

为什么不在第一个脚本完成后触发第二个脚本并将其作为单个cron作业?

答案 2 :(得分:0)

让它写一个文件并检查文件是否存在。

答案 3 :(得分:0)

您可以使用它的方法!有一些控制旗!某处,例如在DB中!

所以ScriptB只是在设置了标志后运行!在它完成之后,它将标志设置回默认状态!

您可以实现该标记方法的另一种方法是使用文件系统!就像@Benjamin建议的那样!