Windows запланированных задач / SQL Server случайное время

У меня следующая ситуация, над которой я работаю, с большинством решенных проблем. Я в настоящее время следующие папки и файлы, существующие на машине.

C:\foo\foo.sql
C:\foo\foo.bat

"foo.sql" - это файл скрипта, в котором есть очень простая строка:

EXEC uspUpdateCounts

"foo.bat" - вызывает SQLCMD для вызова execute foo.sql и записи всех выходных данных хранимой процедуры, вызванной в текстовый файл, с отметкой текущей даты и времени (это будет выполняться только один раз в день):

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S SvrNme -E -d dbName -i C:\foo\foo.sql -o "C:\foo\fooOutput_%date:~-4,4%%date:~-10,2%%date:~-7,2%.txt"

В настоящее время я использую запланированное для Windows задание, чтобы запустить foo.bat. Я хотел бы знать, есть ли способ, которым я могу составить сценарий времени, которое должно происходить случайным образом каждый день, с 6:00 до 13:00 по тихоокеанскому времени. Я возился с некоторыми компонентами времени в сценариях, которые я нашел здесь и там, но я не могу заставить их рандомизировать минуту. Я могу получить час, но это не очень надежно, но в этот момент я полностью потерян. Если кто-то может помочь мне с этим решением, а также объяснить решение, это было бы здорово. Я не просто ищу ответ, но и учусь.

1 ответ

Решение
@echo off

setlocal enableDelayedExpansion
for  %%# in (MON,TUE,WED,THU,FRI,SAT,SUN ) do (

    rem clear old tasks

    SCHTASKS /Delete /TN DailyRandom%%# /f >nul 2>&1

    rem random minute between 0 and 60
    SET /a rand_min=!RANDOM!*59/32768+1
    rem random hour between 6 and 13
    set /a rand_h= !RANDOM!*6/32768+1
    set /a rand_a=!RANDOM!*7/32768+1
    set /a rand_h=rand_h+rand_a
    if !rand_min! LSS 10 set "rand_min=0!rand_min!"
    if !rand_h! LSS 10 set "rand_h=0!rand_h!"
    SCHTASKS /Create /SC weekly /D %%#  /TN DailyRandom%%# /ST !rand_h!:!rand_min! /TR C:\foo\foo.bat
)

Не проверял и не уверен, какая из всех SCHTASKS вам понадобится (проверьте ее справку). И вам нужно будет запускать скрипт каждую неделю. Он создает задачи DailyRanomMON,DailyRanomTUE...,DailyRanomSUN, которые будут установлены между 06:00 и 13:59 (может быть, вам нужно настроить числа).

Другие вопросы по тегам