Я хочу запланировать однократный перезапуск сервера, например чтобы завершить установку обновлений рано утром. Как я могу сделать это из командной строки в Windows 2012?
В Windows 2008 я бы использовал at
команда
at 2am shutdown -r -f -c "restart"
а остаток дня взял в отпуск.
Но в Windows 2012 выполнение этой команды говорит мне, что
The AT command has been deprecated. Please use schtasks.exe instead.
Таким образом, эквивалентная команда с schtasks.exe может быть
schtasks /create /sc once /tn restart /tr "shutdown - r -f ""restart""" /st 02:00
Помимо того, что эта команда легко забывается, у этой команды есть еще важный недостаток: он назначает задачу на 2 часа ночи Cегодня- бесполезно, если я не сплю в час ночи, чтобы запустить его.
Согласно справке для schtasks.exe, /sd
переключатель для установки даты начала не применяется с /sc once
. Так что даже если бы я хотел ввести завтрашнюю дату в формате мм / дд / гггг - а я этого не делаю - я не смогу этого сделать.
Единственное возможное решение, которое я нашел, это Вот, где Кевин Траас предлагает создать пакетный файл для создания запланированной задачи незадолго до полуночи, которая ждет пару минут, а затем создает другую запланированную задачу для выполнения команды, которую вы действительно хотите выполнить. Умно, но далеко не так удобно, как at
.
В shutdown
сама команда имеет параметр задержки /t
что откладывает остановку на несколько секунд до 10 лет. Если вы хотите запланировать выключение через 14 часов, скажем, вы можете запустить
shutdown /r /t 50400
Вы также можете добавить причину с помощью /d
параметр или комментарий с /c
; бегать shutdown /?
для подробностей.
Несмотря на документацию, /SD
параметр кажется совместимым с /SC ONCE
. Задача успешно создана для запуска в указанную дату в указанное время. (Проверено на W8 и W7)
Дополнительно, документация XP для schtasks.exe
доходит до того, что говорит /SD
параметр обязателен при использовании /SC ONCE
, поэтому я полагаю, что существует достаточное количество скриптов, использующих эту комбинацию.
Пример:
C:\Users\Mitch>schtasks /create /sc once /tn restart /tr "shutdown -r -f ""restart""" /st 23:00 /sd 2013-06-13
SUCCESS: The scheduled task "restart" has successfully been created.
C:\Users\Mitch>
Если противоречие с документацией вас не устраивает, рассмотрите возможность создания файла XML напрямую (схема здесь), который определенно поддерживается и определенно поддерживает задачу, запускаемую один раз в будущем. Самый простой способ получить нужный файл - создать его в Планировщике заданий. mmc
защелкнуться и используйте команду экспорта.
Пример:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2013-06-12T21:20:51.004181</Date>
<Author>FOOBAR\Mitch</Author>
</RegistrationInfo>
<Triggers>
<TimeTrigger>
<StartBoundary>2013-06-13T22:20:29</StartBoundary>
<Enabled>true</Enabled>
</TimeTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>FOOBAR\Mitch</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>Your command here</Command>
</Exec>
</Actions>
</Task>
Команда для импорта:
schtasks /CREATE /TN "Task Name" /XML filename.xml
В итоге я создал runat.ps1
воспроизвести некоторые из простых функций at
, используя мудрость ответа Митча.
Синтаксис runat (time) (command)
, например
runat 2am shutdown -r -f -c "restarting the server"
runat 10:15 msg * it`'s 10:15 everyone!
Если вы тоже ностальгируете по старым добрым временам, когда вам не приходилось печатать ...
schtasks /create /ru system /rl highest /sc once /tn restart /tr shutdown -r -f -c \"restarting the server\" /st 02:00 /sd 06/15/2013
... затем вы можете установить его, выполнив эту команду powershell:
iex (new-object net.webclient).downloadstring('https://gist.github.com/lukesampson/5779205/raw/install.ps1');install runat https://gist.github.com/lukesampson/5778559/raw
Или вы можете скачать вручную runat.ps1
сценарий Вот.
Я использовал это в сценарии для 2012 R2, и он отлично работает; Он создаст ежедневную задачу, которая перезапускает сервер в 4:30 утра.
schtasks /create /ru system /rl highest /sc DAILY /tn restart /tr "shutdown /r /f /c "Restarting" /st 04:30
Убедитесь, что вы запускаете это из командной строки CMD с правами администратора.
Энди
Еще один сценарий PowerShell для программной перезагрузки компьютера на следующий день в указанное время.
$tomorrowDate = (get-date).AddDays(1).ToString("dd/mm/yyyy")
schtasks /delete /tn restart /f
schtasks /create /sc once /ru MyDomain\administrator /rp /tn restart /tr "shutdown -r -f" /st 07:13 /sd $tomorrowDate
Я предлагаю использовать команду schtasks с параметром / f.
Используя / f, если есть задача с таким же именем, она модифицируется.
Это очень полезно для развертывания задач с помощью сценариев.
Полный пример перезапуска сервера по расписанию:
schtasks /create /ru system /rl highest /sc DAILY /tn Reinicio /tr "shutdown /r /f /t 0 /c "Reinicio"" /st 22:30 /F
Извлечен из: http://www.sysadmit.com/2016/09/windows-programar-apagado-o-reinicio-automatico.html
Если цель состоит в том, чтобы просто перезагрузиться после установки обновлений, вы можете использовать модуль PSWindowsUpdate для установки обновлений. Вы можете скачать его Вот. После установки просто откройте Powershell и введите
Get-WuInstall -AcceptAll -AutoReboot
Этот сценарий позволяет запланировать перезапуск нескольких серверов на определенную дату / время.
https://gallery.technet.microsoft.com/Schedule-restart-of-2c1131fb?redir=0