Я запускаю 2 скрипта Python из crontab одновременно каждые 30 минут, например
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:
имя = х и сайт = сайт1
напечатанный PID процессов не совпадает.
Почему это происходит и как я могу избежать этого?
P.S. Я подозреваю, что проблема связана с регистратором, который я использую. Может ли скрипт использовать логгер, созданный в другом скрипте? В этом случае он будет печатать в каждой строке данные, относящиеся к первому сценарию.
Каждый скрипт выполняет один и тот же код:
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)
.....
в журнале я вижу, что идентификатор процесса, который генерирует регистратор в последней строке, одинаков для обоих сценариев.
Я попытаюсь использовать имя регистратора, уникальное для каждого запуска скрипта, вместо «MyLog». Хотя странно, что экземпляр регистратора можно получить из другого процесса.