我每 30 分钟同时从 crontab 运行 2 个 python 脚本,例如
00,30 6-19 * * 0-5 /.../x.py site1
*/3 6-19 * * 0-5 /.../y.py site2
一开始,这两个脚本都导入了一个模块,该模块将一些数据打印到日志中,例如
name = os.path.basename(sys.argv[0])
site = sys.argv[1]
pid = os.getpid()
有时(!)第二个脚本 y 打印到脚本 x 的日志输入参数:name = x 和 site = site1 打印的进程的 PID 不一样。为什么会发生这种情况,我该如何避免这种情况?
PS我怀疑问题与我使用的记录器有关。脚本可以使用在另一个脚本中创建的记录器吗?在这种情况下,它将打印与第一个脚本相关的每一行数据。每个脚本执行相同的代码:
log = logging.getLogger('MyLog')
log.setLevel(logging.INFO)
dh = RotatingSqliteHandler(os.path.join(progDirs['log'],'sqlitelog'),processMeta, 5000000)
log.addHandler(dh)
记录器处理程序定义如下:
class RotatingSqliteHandler(logging.Handler):
def __init__(self, filename, progData, maxBytes=0):
logging.Handler.__init__(self)
self.user = progData['user']
self.host = progData['host']
self.progName = progData['name']
self.site = progData['site']
self.pid = random.getrandbits(50)
.....
在日志中,我看到记录器在最后一行生成的进程 ID 对于两个脚本都是相同的。
我将尝试使用每个脚本运行的唯一记录器名称,而不是“MyLog”。尽管可以从另一个进程获取记录器实例很奇怪。