Показать полную графическую версию : Выполнение задачи со сдвигом.
krasavchik0
16-10-2017, 18:21
Через планировщик запускаю скрипт копирования файлов. Копирование идет через узкий канал. Поэтому хотелось иметь сдвиг по времени. Или возможность запускать скрипт в 50 случаев. Скажем запускаем скрипт получаем переменную рандом и если она меньше Х скрипт запускаем. Если не повезет и скрипт не запустится, то нечего страшного – просто он запустится при старте виндовс и будут тормоза 15-45 мин (чем больше одновременно включат чем дольше). В целом так сейчас и происходит ((. Дабы файлы месятся в источнике раз в 1-2 месяца. Но все ровно не удобно коллапс создается по утрам.
написал тестовый но переменная рандом не меняется((
FOR /L %%a IN (0,1,1000) DO (
set /a random10=%random%/3277
If %random% GTR 50 ( echo true2 %random% >>888.txt ) ELSE ( echo false2 %random% >>999.txt )
)
megaloman
16-10-2017, 18:58
Через планировщик запускаю скрипт копирования файлов. » Как настроен запуск? При старте windows или по назначенному времени? На чем организован скрипт копирования, cmd? Версия windows?
krasavchik0, Вы не могли бы перевести на русский? Ваша задача непонятна, а выбранное Вами решение нуждается в обосновании.
krasavchik0
16-10-2017, 20:02
Как настроен запуск? При старте windows или по назначенному времени? На чем организован скрипт копирования, cmd? Версия windows? »
Пока настроен в планировщике задании при включении ПК. Задание с правами система.
Но хочу "дергать" раз в 3 часа по времени. Так как разливаю по АД то индивидуально писать разное время всем не интересно.
Да скрипт в bat банальный это запускает планировщиком "При запуске"
robocopy "\\dc\distr\ххх" "C:\Program Files (x86)\хххх" /MIR /Z /R:3 /W:10 /LOG:%LogLocationDir%\%NameBat%\%date%_%NameBat%_%computername%_%username%_dd.log
А это хочу запускать по времени. Но хотелось иметь сдвиг как он сделать в домены политиках по сути мне нужен аналог GPO
"Случайная величина, добавляемая к интервалу времени обновления во избежание одновременных запросов групповой политики всеми клиентами. "
robocopy "\\dom\distr\ххх" "C:\Program Files (x86)\хххх" /E /Z /R:3 /W:10 /LOG:%LogLocationDir%\%NameBat%\%date%_%NameBat%_%computername%_%username%_dd.log
Вы не могли бы перевести на русский? Ваша задача непонятна, а выбранное Вами решение нуждается в обосновании. »
Я синхронизирую папку на ПК. Команды выше. Вот и хочу эту синхронизацию разнести по времени. Ручками это делать не хочу, через планировщик.
Вот и хотел в скрипте делать аналог орла и решки. Орел запускать, решка нет. Путем вероятностей сделать, что бы скорее всего скрипт запустился у 10 (Опять переживу если он запустится всего 5 или 35% ) процентов пользователей. Супер точность не нужна.
При этом я понимаю и допускаю, что могут быть случае когда на одном ПК выпал орел за неделю 10 раз. А у другого не разу... не страшно, ну не повезло пользователю. Будет ждать долго загрузки((.
krasavchik0, %RANDOM% здесь точно не пригоден. Он слишком «псевдо» для этого. Возьмите какой-нибудь WSH или PoSH. Например, WSH/VBScript:
Option Explicit
Randomize Timer
If Int(101 * Rnd()) <= Int(WScript.Arguments.Item(0)) Then
WScript.Quit 0
Else
WScript.Quit 1
End If
И пакетный файл:
cscript.exe //nologo "Sample.vbs" 50 && robocopy "\\dc\distr\ххх" "C:\Program Files (x86)\хххх" /MIR /Z /R:3 /W:10 /LOG:%LogLocationDir%\%NameBat%\%date%_%NameBat%_%computername%_%username%_dd.log
где «50» — значение процента вероятности срабатывания. Например, значение «20» приведёт к тому, что robocopy будет исполняться в одном случае из пяти.
krasavchik0
17-10-2017, 15:52
Вы не могли бы перевести на русский? Ваша задача непонятна, а выбранное Вами решение нуждается в обосновании. »
кстати вы правы. Как вариант генерировать случайное время и таймер замедления. Ну в челом все это грабли пока остановлюсь на вероятностях.
megaloman
17-10-2017, 16:13
krasavchik0, Ваша задача не очень понятна, но внесение вероятности - угарная идея, которая скорее всего приведёт к головной боли :) . Попробую предложить нечто более предсказуемое.
1. В идеале, как я понял, все компьютеры должны обновиться за 10 дней (10%*10дней=100%), то есть каждый компьютер должен обновиться раз в 10 дней (в идеале).
2. Каждый компьютер имеет IP, последняя цифра которого меняется от 0 до 9
3. Каждый день характеризуется датой, вторая цифра в значении дня меняется от 0 до 9@Echo Off
CLS
Call :IPping "LastIP"
Call :DaySecond "Day2"
If "%LastIP%"=="%Day2%" (
Echo: Запускаем синхренезацию :)
) Else (
Echo Для этого компа "%LastIP%" сегодня "%Day2%" ничего не запускаем
)
GoTo :Eof
:IPping
Set "%~1="
FOR /F "tokens=2 delims=[]" %%b in ('ping -4 -n 1 %ComputerName%') Do If Not "%%a"=="" (set _IP=%%b &GoTo :Continue)
GoTo :Eof
:Continue
Set "_IP=%_IP: =%"
Set "%~1=%_IP:~-1%"
GoTo :Eof
:DaySecond
Set "%~1=%Date:~1,1%
GoTo :EofПонятно, это не идеал: кто-то попадёт раз в месяц на выходной, кому-то повезёт 31 и 1 числа.
Сколько машин должны сделать копии? Сколько машин одновременно могут, на Ваш взгляд, это делать? И сколько при этом для них потребуется времени? Как вариант, если компы включаются приблизительно в одно время, делать задержку копирования в часы для групп компов в зависимости от, например, того же IP.
krasavchik0
17-10-2017, 18:58
Сколько машин должны сделать копии?[/post]
30
Сколько машин одновременно могут, на Ваш взгляд, это делать?
[/post]
Честно сложный вопрос, Машины имеют разную ширину канала от 2 мегабит до 10 мегабит. То есть максимальная скорость у некоторых машин зарезана шереспером, что бы ПО видеонаблюдения не забило канал.
И сколько при этом для них потребуется времени?
[/post]
Обычно мегабайт 600-800 МБ
От 10 до 50 минут примерно. В зависимости от шейпера.
Как вариант, если компы включаются приблизительно в одно время, делать задержку копирования в часы для групп компов в зависимости от, например, того же IP. »
Не получится при включении я еще удаляю старые версии и если пользователь будет работать в неё, то программа упадет. Хотя и при загрузке программы если пользователь вдруг её случайно закроет и при повторном открытии уже будет ошибка, так как программа увидит свежую версию, но не будет знать, что она не полностью еще скачена.....мда косяк....
Вообщем действую по старинке обновляю папку вечером и все ПК в ребут. К утру будет все ок)).
megaloman
17-10-2017, 20:11
krasavchik0, при включении я еще удаляю старые версии и если пользователь будет работать в неё, то программа упадет. » Качайте обновление в промежуточную папку, при благополучном завершении скачивания скопируйте туда мизерный файлик-флаг. Далее, сделайте запуск софта у пользователя командным файлом, который проверит его наличие, и при наличии этого файла-флага в промежуточной папке сначала переместит всё скачанное в рабочую папку, а затем уж запустит пользовательский софт. Если обновлерие скачано неполностью, флага нет, ничего никуда не перемещаем, запускается имеющийся софт.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.