Похоже, мне нужно обновить полный сценарий для всех.
Наши пользователи должны забрать все, что им нужно, с нашего файлового сервера для синхронизации с удаленным местоположением, но пользователи имеют ограниченные права на файловом сервере для перемещения файлов. так вот моя задача:
создать инструмент, который пользователь может использовать для сбора данных и синхронизации с удаленным местоположением. DFS и сторонние инструменты не являются опциями, они должны быть кодами, созданными нами, и все должно работать в фоновом режиме.
Вот мой способ сделать это, и теперь он работает. Я сделал 3 штуки:
** Приложение **** HTA с VBS, установленным на пользовательском ПК, предоставляющее пользователю файловый браузер для сбора данных.
** B **** Совместное расположение, которое позволяет HTA записывать путь к данным в текстовый файл. любой путь в этом текстовом файле будет преобразован в мягкую ссылку в окончательное местоположение.
** C **** Последнее место на файловом сервере содержит все программные ссылки.
Вот как это работает:
Пользователь выбирает данные с файлового сервера с помощью HTA, который я сделал. Он запишет полный путь к данным в файл 000.txt в общем месте. Мой скрипт бесконечного цикла отслеживает это общее расположение, и если файл 000.txt создается любым пользователем в этой общей папке, он вызывает другой скрипт для чтения всех путей к данным в этом 000.txt и использования mklink
для создания программных ссылок на основе предоставленных пользователем путей и вывода программных ссылок в конечное местоположение, а затем удаление файла 000.txt. Все программные ссылки в этом последнем месте будут синхронизированы robocopy
ночью по расписанию. В моем приложении HTA требуется больше функций, об этом говорить не приходится.
Поскольку здесь никто не говорит о кодировании, я удалил свой код бесконечного цикла. Этот сценарий цикла запускается с Windows и работает как служба. Я могу запустить / остановить его в любое время. Он в основном просто контролирует эту общую папку, если какой-либо пользователь создает там файл 000.txt, он вызывает mklink.bat
сделать softlins и 000.txt будет удален mklink.bat
когда сделаны софтлинки. Причина, по которой я использую бесконечный цикл вместо планировщика задач, заключается в том, что пользователю необходимо видеть результаты в этом конечном месте сразу после отправки пути к данным. Я думал, что минимальный интервал планировщика задач составляет одну минуту (@MikeAWood сказал, что это может быть 1 секунда. Спасибо!), Поэтому я сделал бесконечный цикл с этим 2-секундным интервалом для отслеживания этой общей папки.
Мой вопрос был следующий:
Это хорошая идея - запускать бесконечный цикл на сервере, например, вечно, для мониторинга папки?
Я следил за использованием ресурсов на сервере во время работы этого скрипта. Я не вижу значительных расходов ... так что, думаю, это будет безвредно, верно?
Если планировщик задач может обрабатывать интервал в 1 секунду, Думаю, мой вопрос решен. Спасибо вам всем.
Или у вас есть лучший способ сделать это, или какое-либо мнение о том, как я это делаю.
В качестве общей альтернативы этому: поместите свой сценарий в планировщик заданий и запускайте его каждую минуту, две минуты или что угодно. Это более надежно, так как ваш процесс переживает перезагрузки или ошибки сценария. Использование запланированных задач не только позволяет вашему процессу пережить перезагрузки, как уже упоминалось, но также может сделайте вашу задачу доступной для развертывания на большом количестве серверов с помощью настроек групповой политики. Ваше текущее решение - враг как масштабируемости, так и надежности.
Что касается самого сценария, о котором вы говорите - похоже, что вы заново изобретаете монстра Франкенштейна из DFS-R и / или Robocopy.
DFS-R - это масштабируемый зрелый инструмент репликации файлов, встроенный в Windows Server. Вы должны посмотреть, сможете ли вы использовать его в этой ситуации. Microsoft вложила в DFS-R гораздо больше инженерной мысли, чем вы могли бы вложить в сценарий, делающий то же самое.
Кроме того, даже если по какой-то причине вы не можете использовать DFS-R, Робокопия имеет /mir
переключатель, который будет зеркалировать каталоги. Если по какой-то причине вы действительно не можете использовать DFS-R, по крайней мере используйте что-то подобное в скрипте.
Вы должны похвалить вас за то, что спросили о вашем подходе. Легко реализовать первую идею, но лучше проверить ее с помощью других.
Несколько проблем с вашим подходом:
(Некоторые из этих проблем могут быть решены, как вы упомянули, с помощью службы.) При этом только вы можете оценить достоверность любого конкретного решения проблемы, с которой вы столкнулись. По крайней мере, теперь у вас есть варианты.
Несомненно, есть лучшие способы сделать это, чем запуск бесконечного цикла. Бесконечные петли причиняют боль и вызывают разочарование на всех уровнях. Пожалуйста, не делай этого.
Мне любопытно, почему вы спрашиваете. Несколько человек предложили альтернативные решения, и, похоже, вам было приказано сделать это таким образом. Вы ищете альтернативы или ищете боеприпасы, чтобы вернуться к своему руководителю и протестовать против этого?
Причины, по которым это не делается, перечислены в других ответах:
он подвержен сбоям в том смысле, что он не выдержит сбоя, перезапуска системы или любой ошибки обработки.
это требует усилий с вашей стороны (в отличие от поставщика), чтобы поддерживать
есть риски безопасности для этого метода
это относительно неэффективно
Что касается альтернатив, у меня тоже был плохой опыт работы с DFS, и я использовал DoubleTake Replication с отличными результатами. Однако последующий выпуск DFS разрешил мои проблемы с DFS, и теперь мы используем его для репликации DR через WAN.