Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Выполнение задачи со сдвигом. (http://forum.oszone.net/showthread.php?t=330533)

krasavchik0 16-10-2017 18:21 2770985

Выполнение задачи со сдвигом.
 
Через планировщик запускаю скрипт копирования файлов. Копирование идет через узкий канал. Поэтому хотелось иметь сдвиг по времени. Или возможность запускать скрипт в 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 2770993

Цитата:

Цитата krasavchik0
Через планировщик запускаю скрипт копирования файлов. »

Как настроен запуск? При старте windows или по назначенному времени? На чем организован скрипт копирования, cmd? Версия windows?

Iska 16-10-2017 19:05 2770995

krasavchik0, Вы не могли бы перевести на русский? Ваша задача непонятна, а выбранное Вами решение нуждается в обосновании.

krasavchik0 16-10-2017 20:02 2771009

Цитата:

Цитата megaloman
Как настроен запуск? При старте 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
Цитата:

Цитата Iska
Вы не могли бы перевести на русский? Ваша задача непонятна, а выбранное Вами решение нуждается в обосновании. »

Я синхронизирую папку на ПК. Команды выше. Вот и хочу эту синхронизацию разнести по времени. Ручками это делать не хочу, через планировщик.
Вот и хотел в скрипте делать аналог орла и решки. Орел запускать, решка нет. Путем вероятностей сделать, что бы скорее всего скрипт запустился у 10 (Опять переживу если он запустится всего 5 или 35% ) процентов пользователей. Супер точность не нужна.

При этом я понимаю и допускаю, что могут быть случае когда на одном ПК выпал орел за неделю 10 раз. А у другого не разу... не страшно, ну не повезло пользователю. Будет ждать долго загрузки((.

Iska 16-10-2017 21:15 2771045

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 2771307

Цитата:

Цитата Iska
Вы не могли бы перевести на русский? Ваша задача непонятна, а выбранное Вами решение нуждается в обосновании. »

кстати вы правы. Как вариант генерировать случайное время и таймер замедления. Ну в челом все это грабли пока остановлюсь на вероятностях.

megaloman 17-10-2017 16:13 2771312

krasavchik0, Ваша задача не очень понятна, но внесение вероятности - угарная идея, которая скорее всего приведёт к головной боли :) . Попробую предложить нечто более предсказуемое.

1. В идеале, как я понял, все компьютеры должны обновиться за 10 дней (10%*10дней=100%), то есть каждый компьютер должен обновиться раз в 10 дней (в идеале).
2. Каждый компьютер имеет IP, последняя цифра которого меняется от 0 до 9
3. Каждый день характеризуется датой, вторая цифра в значении дня меняется от 0 до 9
Сравним п.2 и п.3, при равенстве цифры дня и цифры IP запустим что надо.
ИМХО, такой процесс более предсказуем.
Код:

@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 2771337

Цитата:

Цитата megaloman
Сколько машин должны сделать копии?[/post]

30
Цитата:

Цитата megaloman
Сколько машин одновременно могут, на Ваш взгляд, это делать?
[/post]

Честно сложный вопрос, Машины имеют разную ширину канала от 2 мегабит до 10 мегабит. То есть максимальная скорость у некоторых машин зарезана шереспером, что бы ПО видеонаблюдения не забило канал.

Цитата:

Цитата megaloman
И сколько при этом для них потребуется времени?
[/post]

Обычно мегабайт 600-800 МБ
От 10 до 50 минут примерно. В зависимости от шейпера.

Цитата:

Цитата megaloman
Как вариант, если компы включаются приблизительно в одно время, делать задержку копирования в часы для групп компов в зависимости от, например, того же IP. »

Не получится при включении я еще удаляю старые версии и если пользователь будет работать в неё, то программа упадет. Хотя и при загрузке программы если пользователь вдруг её случайно закроет и при повторном открытии уже будет ошибка, так как программа увидит свежую версию, но не будет знать, что она не полностью еще скачена.....мда косяк....


Вообщем действую по старинке обновляю папку вечером и все ПК в ребут. К утру будет все ок)).

megaloman 17-10-2017 20:11 2771353

krasavchik0,
Цитата:

Цитата krasavchik0
при включении я еще удаляю старые версии и если пользователь будет работать в неё, то программа упадет. »

Качайте обновление в промежуточную папку, при благополучном завершении скачивания скопируйте туда мизерный файлик-флаг. Далее, сделайте запуск софта у пользователя командным файлом, который проверит его наличие, и при наличии этого файла-флага в промежуточной папке сначала переместит всё скачанное в рабочую папку, а затем уж запустит пользовательский софт. Если обновлерие скачано неполностью, флага нет, ничего никуда не перемещаем, запускается имеющийся софт.


Время: 04:42.

Время: 04:42.
© OSzone.net 2001-