![]() |
Отслеживание изменения конкретного файла по дате и времени
Доброго времени, есть файл базы который периодически обновляется, но когда он обновился то программу нужно перезапустить, в данный момент у меня сделан батник который по циклу раз в час просто перезапускает программу, но хотелось бы что батник отслеживал изменения файла и перезапускал программу только если дата время у него изменилась.
в моем понимании: - надо чтобы при первом запуске батник сделал текстовый файл (flag.txt) если нету, рядом с собой в который записал флаг времени, закрылся. - потом при следующем запуске, сравнил флаг времени со временем в данный момент у файла базы, если такой же то просто закрылся, если изменен то внести новый флаг в flag.txt и запустить батник перезапуска программы, и закрывался. этот батник будет запускаться через шедулер системы раз в 5 минут. Или другой вариант без файла флага. батник при запуске будет проверять если файл не изменялся более 5 минут то закрывается, если дата время изменения файла произошли менее 5 минут, то есть он изменился, то запускает батник перезугрузки программы, и закрывается. сам не смог рабочий сделать, еще изучаю эти дела буду благодарен за помощь. |
Вложений: 1
zergnet, если этот батник будет запускаться через шедулер системы раз в 5 минут, то дергающийся экран не фэншуйно. Поэтому лучше использовать VBS-скрипт.
Код:
FilePrg = "C:\Windows\System32\notepad.exe" 'Перезапускаемая программа |
Цитата:
время запуска в принципе можно использовать и 10 или 30 минут, это не очень критично. Мой батник который счас работает убивает и перезапускает программу, походу тоже варварским способом через убиение процесса.. |
Вложений: 1
zergnet, CMD
Код:
@Echo Off При наличии в путях кириллицы сохранить в 866 кодировке |
очень извиняюсь, все еще разбираюсь только, немоглиб вы для моего понимания разъяснить что да как
Set "FilePrg=C:\Windows\System32\notepad.exe" Set "FileSee=Z:\Soft_In\файл базы который периодически обновляется.dbf" Set "FileLog=Z:\Soft_In\файл базы который периодически обновляется.dbf.log" с этим все понятно это в переменные вставляются пути на программу, отслеживаемой базой, и лог с датой временем (флаг) для сравнения For %%e In ("%FilePrg%") Do Set "Exe=%%~nxe" -это что за действие, проверка на запущенность программы? For %%t In ("%FileSee%") Do Set "DateTimeSee=%%~tt" -это как я догадываюсь вытаскивание даты времени отслеживаемого файла Set "DateFileOld=" If Exist "%FileLog%" Set /P DateFileOld=<"%FileLog%" - это как я понял если файл лог есть то в переменную DateFileOld помещается время из файла лога If "%DateTimeSee%"=="%DateFileOld%" Exit /B 0 - тут происходит сравнение текущего времени и из переменной DateFileOld, если одинаково то просто закрывается. :Begin >nul 2>&1 (TaskList /Fi "ImageName Eq %Exe%" |Find /I "%Exe%" && (TASKKILL /IM "%Exe%" &GoTo :Begin)) -тут как я понял в общих чертах цикл по убиванию процесса, но структура команд не совсем понял >"%FileLog%" (Echo %DateTimeSee%) -это как я понял помещение в файл лога нового времени Start " " "%FilePrg%" - запуск программы с переменной FilePrg Поправите меня если я неправильно понял,у меня батник который есть просто закрывает TASKKILL notepad , как я понял это не оптимально и процесс может иногда оставаться.. если делать перенаправление, чтобы не в этом батнике закрывалось а запускался другой батник который закрывает и запускает программу. :Begin >nul 2>&1 (TaskList /Fi "ImageName Eq %Exe%" |Find /I "%Exe%" && (TASKKILL /IM "%Exe%" &GoTo :Begin)) не нужно писать, а после кода >"%FileLog%" (Echo %DateTimeSee%) пишу вызов другого батника? например call killer.bat Exit /B 0 |
я могу, остальное Вы прокомментировали правильно
Цитата:
Цитата:
Цитата:
Код:
|
Как я упоминал, у нас там есть батник который по шедулиру раз в час просто, убивал процессы программ и основного и связанных с этой программой модулей, потому просто рассматривал гипотетически передачу работы на другой батник который уже есть. В батнике killer.bat там прописаны таскилы процесса самой программы что с базой работает но и доп программ-модулей, и в том же батнике через timeout они последовательно стартуют. Я считаю что так очень топорно через час убивать все, и пытался найти более рациональное решение, что поделать что программисты что писали эти программы их написали криво...и вот скриптами -костылями мы это поправляем..
Но я с вами полностью согласен нафига плодить кучу батников. Скрипт проверил уже на сервере, все работает. Спасибо вам Большое, многое мне стало яснее. |
zergnet,
Вот вариант совмещения Вашего киллера и анализа даты/времени изменения файла.
Код:
@Echo Off |
Цитата:
|
Цитата:
До того, да и счас многие специалисты по сообщениям с головного офиса, вручную перезагружают эти модули... ПФР россии)) |
Да ладно. Собирается список косяков и отправляется вашему начальству, которое связывается с начальством программеров, а те их простимулируют.
На пенсию, видать, лучше не рассчитывать. |
Цитата:
|
Цитата:
|
Время: 23:43. |
Время: 23:43.
© OSzone.net 2001-