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

4 投票
4 回答
4243 浏览
提问于 2025-04-17 07:21

我有两个Python脚本在后台定时运行,叫做cronjobs

第一个脚本(ScriptA)负责处理日志文件,并把记录插入到一个表格里;第二个脚本(ScriptB)则利用这些记录来生成报告。

我安排ScriptA在ScriptB之前一个小时运行,但有时候ScriptB会在ScriptA还没完成插入的时候就开始运行,这样就会生成错误的报告。

我该怎么确保ScriptB在ScriptA完成后再运行呢?

补充说明

ScriptA和ScriptB的功能完全不同,比如一个是用来保存用户数据,另一个是供内部使用。而且可能还有其他的脚本(ScriptC)依赖于ScriptA。

所以我不能把这两个任务合并在一起。

4 个回答

0

让它写一个文件,然后检查这个文件是否存在。

9

是不是可以考虑只设置一个定时任务,让它先运行ScriptA,然后再运行ScriptB?这样你就能确保ScriptB在ScriptA完成之后才会开始运行,而且也不需要改动任何一个脚本。

这个定时任务可以运行一个简单的shell脚本,比如:

#!/bin/sh

python ScriptA.py
python ScriptB.py

补充:如果你真的不能把两个定时任务合并在一起,可以参考这个问题中提到的方法,来等待第一个进程完成。

2

一种方法是确保这两个任务是独立的定时任务(cron jobs),并且它们之间有足够的时间间隔,这样可以确保第一个任务完成后,第二个任务再开始。

另一种方法是使用锁定机制,正如其他人提到的那样。但要注意,如果因为锁定而导致任务执行失败,定时任务不会重新执行你的任务。所以,第二个任务要么需要在等待中循环,直到它不再看到锁,要么需要等到第一个任务完成的标志出现,或者你得想点其他办法。

为什么不在第一个任务完成后直接触发第二个任务,把它们合并成一个定时任务呢?

撰写回答