На моем prod-сервере я буду запускать прогу python через вкладку cron, которая будет следить за местоположением облака, и если будет доступен какой-либо новый файл, он будет извлечен и установлен на сервере, где находится прога pythonБег.Однако есть вероятность, что облачное хранилище может не получить новый файл в течение нескольких дней.Таким образом, в этом случае последний обновленный файл будет оставаться последним файлом для программы python, пока не появится новый файл.Таким образом, один из способов состоит в том, чтобы сравнивать временную метку файла с некоторым флагом в коде, то есть, если временная метка файла Debian не изменяется, тогда программа python сравнивает временную метку файла с флагом и затем завершает работу / проходитили выполнить бизнес-логику.Ниже приведен фрагмент кода, с которым я пытаюсь работать:
import os
import subprocess
import glob
src_path = glob.iglob('path_to/*.deb')
trgt_path = '<Path>'
try:
for i in src_path:
ltst_file = max(i, key=os.path.getmtime)
time_stamp = os.path.getmtime(ltst_file)
flag = 0
while True:
if flag == time_stamp:
pass
else:
subprocess.Popen(['cp', '-r', ltst_file, trgt_path])
flag = time_stamp
break
except (ValueError, Exception, FileNotFoundError) as foo:
print("Program couldn't bring the file from ab20", foo)
1) Программа в первый раз всегда будет переходить к блоку "else", потому что значение флага и time_stamp будут разными., он должен перейти к блоку «если» во 2-й раз, если исходное местоположение не обновляется с каким-либо новым файлом.Но это никогда не идет в блок «если» в моем случае.
2) Для дальнейшей диагностики я запустил прогу без 'break'.На этот раз он снова пошел в блок 'else' и обновил целевое местоположение тем же файлом, который пришел в исходное местоположение пару дней назад, но для изменения он перешел в блок «if» после выполнения и остается тамнавсегда.Таким образом, в идеале, он удовлетворяет частичному требованию, но не полностью, так как он должен непосредственно перейти к блоку 'if' и выйти / пройти вместо перехода к блоку 'else', чтобы скопировать файл в целевое местоположение в первую очередь как файлв те же дни.Я использовал try и кроме block, чтобы перехватить любую ошибку,
3) С помощью оператора 'break' в программе код просто дает следующее сообщение.
Program couldn't bring the file from ab20 [Errno 2] No such file or directory: 'g'
Process finished with exit code 0
Я не уверенПо какой логике мне не хватает, пожалуйста, предложите.
Ошибка:
Traceback (most recent call last):
File "x20.py", line 7, in <module>
ltst_file = max(src_path, key=os.path.getmtime)
ValueError: max() arg is an empty sequence
Добавление ошибки пустого списка:
[]
No files found at all.
[]
No files found at all.
[]
No files found at all.
[]
No files found at all.
[]
No files found at all.
[]
No files found at all.
Я могу записаться на дискрасположение в облаке через CLI и может подтвердить наличие 5 файлов debian.
Пара проблем:
1) Наш план состоит в том, чтобы выполнить код с помощью задания cron.Итак, если я правильно понял, то каждый раз, когда выполняется задание cron, значение «latest_timestamp_processed» всегда будет по умолчанию равно None.Таким образом, в случае, если местоположение облака не обновляется даже в течение пары часов, код всегда будет рассматривать уже доступный файл как последний файл и продолжит работать с тем же файлом снова и снова.Пожалуйста, поправьте меня, если я ошибаюсь.Есть ли в любом случае, мы можем решить эту проблему, модифицируя существующий код как-то?или если у вас есть альтернативное предложение, дайте мне знать.
2) Я планирую выполнить код в фоновом режиме и сгенерировать логи с помощью модуля регистрации Python.Я изменил код для использования модуля регистрации, так как журналы требуются.Так что, да, выполнение кода непрерывно в фоновом режиме будет генерировать огромные журналы, которые я, безусловно, могу запустить cron, чтобы удалить их через определенный интервал.Эту часть я просто хотел сообщить вам.
В противном случае ваш код работает так, как вам нужно.