Мне нужно запланировать выполнение задания на 25-е число каждого месяца. Если 25-е число приходится на выходные, мне нужна работа, запланированная на прошлую пятницу перед 25-м числом. Планировщик задач Windows не имеет возможности для такого рода задач. Кто-нибудь может сказать мне, что мне делать?
Обертка, оценивающая такие условия.
Если вы знаете сценарии оболочки, вы можете сделать это с помощью gnu date.
Если вы знаете Perl, попробуйте Time :: Piece (в ядре, начиная с Perl 5.009).
Затем вызовите оболочку из cron.daily, вычислите дату - это легкая повседневная задача для машины.
Ответ Poisonbit в основном правильный. Если функции планирования, встроенные в планировщик задач Windows, не могут предоставить конкретный тип расписания, который вам нужен, вам придется самостоятельно обойти ограничения. Он предлагает выполнить вашу работу из сценария, который планировщик задач будет запускать по простому ежедневному расписанию. Но сценарий будет достаточно умен, чтобы выполнять «настоящую» работу только в нужный день. Я взял на себя смелость предоставить образец на основе PowerShell, который вы могли бы использовать.
$today = Get-Date
$d = $today.Day
$wd = $today.DayOfWeek
if ( ($d -eq 25 -and $wd -ne "Saturday" -and $wd -ne "Sunday") -or (($d -eq 23 -or $d -eq 24) -and $wd -eq "Friday") )
{
"time to execute my job"
}
Все это проверяет текущую дату. Если это 25-е число, а не суббота / воскресенье, или если сегодня пятница, 23-е или 24-е, он напечатает сообщение «время выполнить мою работу», которое вы замените командой для фактического выполнения вашей работы.
** Обновлено с улучшенной логикой благодаря Полу *
Райан Болджер получил его для условий пятницы ...
Если 25-е число выпадает с понедельника по четверг, вы все равно захотите запустить программу 25-го числа, поэтому измените его условие на
if (($day -eq 25) -or ($weekday -eq "Friday" -and $day -ge 23 -and $day -le 25))
Примечание. Я никогда не писал сценарии PowerShell, я просто предполагаю синтаксис из кода, предоставленного Райаном.