Я работаю над POC автоматизации, в которой я должен выполнить следующие шаги в последовательности: 1) создать пакет Debian с помощью инструмента и отправить его в облачное хранилище
2) На моемprod server Я буду выполнять программу на python через задание cron, которое будет следить за местоположением облака, и если будет доступен какой-либо новый файл, он извлечет этот файл оттуда и установит его (debian) на сервер, где находится pythonПрограмма запущена.Однако есть вероятность, что облачное хранилище может не получить новый файл в течение нескольких дней.Таким образом, в этом случае, даже если репозиторий обновлен, скажем, 3 дня назад, но для программы python, которая отслеживает местоположение облака, файл, загруженный в облако, будет самым последним, пока не появится новый файл.Таким образом, в качестве обходного пути я пытаюсь работать над логикой, которая будет продолжать сравнивать временную метку, то есть, если временная метка файла debian не меняется, то предполагается, что программа python завершает работу / проходит или выполняет бизнес-логику.,
Я написал две программы, которые удовлетворяют точке (1) и частично удовлетворяют точке (2).В дальнейшем я сосредоточусь на коде точки (2).Ниже приведен код, который, по моему мнению, должен работать в фоновом режиме для извлечения самого последнего файла, и если временная метка совпадает, то она должна выйти, чтобы протестировать сценарий, я только что выбрал локальные пути моей машины:
import os
import subprocess
import glob
latest_file = 0 # initialized latest_file with zero to compare later
new_path = '/home/amitesh/Desktop'
file_path = glob.iglob('/home/amitesh/Desktop/linux_triad/*.deb')
latest_file = max(file_path, key=os.path.getctime) # Now the latest_file variable has a file in it
time_stamp = os.path.getmtime(latest_file)# gives the timestamp of the latest file
a = 0 # initialized it with zero to compare it with time stamp as follows.
while True:
if a == time_stamp:
pass
else:
subprocess.Popen(['cp', '-r', latest_file, new_path])
break
В приведенном выше коде я просто пытаюсь сравнить две переменные 'a' и 'timestamp', т. Е. Если значение a совпадает с time_stamp, то ничего не делать и просто передавать.остальное выполнять бизнес логику.Когда я выполняю код, я вижу, что файл копируется в нужное место, однако, если я проверяю метку времени файла, это, похоже, не самая последняя.ниже приведена группа файлов, доступных в переменной file_path.
baqus_0.1-2_amd64.deb Tue 14 May 2019 01:24:02 PM IST
baqus_0.3-1_amd64.deb Tue 14 May 2019 01:24:04 PM IST
baqus_0.4-1_amd64.deb Tue 14 May 2019 01:24:09 PM IST
leesofd_0.1-1_amd64.deb Tue 14 May 2019 01:24:16 PM IST
syslmd_0.3-2_amd64.deb Tue 14 May 2019 01:24:21 PM IST
Мой код выбрал второй файл из списка, и, кажется, он не имеет самой последней отметки времени, если мы внимательно посмотрим.Последняя отметка времени принадлежит syslmd_0.3-2_amd64.deb, то есть 13:24:21 IST.Итак, снова мой код выбирает baqus_0.3-1_amd64.deb, который имеет отметку времени 01:24:04 IST, которая ниже.Я выполнил это несколько раз, чтобы убедиться, что мои наблюдения верны, и так оно и есть.каждый раз один и тот же файл копируется в целевое местоположение.
Итак, либо моя логика неверна, либо я использую неправильные функции.Пожалуйста, предложите.
Измененный код внутри цикла while
if a == time_stamp:
pass
else:
print('copying of the ', latest_file, 'started')
sleep(4)
subprocess.Popen(['cp', '-r', latest_file, new_path])
sleep(3)
os.system('sudo dpkg --install ' +latest_file)
a = time_stamp