Làm cách nào tôi có thể lên lịch khởi động lại máy chủ từ dòng lệnh trên Windows 2012?


15

Tôi muốn lên lịch khởi động lại máy chủ một lần, ví dụ để hoàn tất cài đặt cập nhật vào sáng sớm. Làm thế nào tôi có thể làm điều này từ dòng lệnh trên Windows 2012?

Trên Windows 2008, tôi đã sử dụng atlệnh này,

at 2am shutdown -r -f -c "restart"

và nghỉ phần còn lại của buổi chiều.

Nhưng trên Windows 2012, chạy lệnh này cho tôi biết rằng

The AT command has been deprecated. Please use schtasks.exe instead.

Vì vậy, lệnh tương đương với scht task.exe có thể là

schtasks /create /sc once /tn restart /tr "shutdown - r -f ""restart""" /st 02:00

Ngoài việc rất đáng quên, lệnh này còn có một nhược điểm quan trọng khác : nó lên lịch cho nhiệm vụ trong 2 giờ sáng hôm nay sử dụng nhiều, trừ khi tôi thức dậy lúc 1 giờ sáng để chạy nó.

Theo trợ giúp cho scht task.exe, việc /sdchuyển đổi để thiết lập ngày bắt đầu không được áp dụng với /sc once. Vì vậy, ngay cả khi tôi muốn loại ngày mai ở định dạng mm / dd / yyyy, và tôi không thể làm điều này.

Giải pháp khả thi duy nhất tôi tìm thấy là ở đây , nơi Kevin Traas đề nghị tạo tệp bó để tạo một tác vụ theo lịch trình ngay trước nửa đêm, chờ vài phút và sau đó tạo một tác vụ theo lịch trình khác để chạy lệnh mà bạn thực sự muốn chạy. Khéo léo, nhưng không nơi nào thuận tiện bằng at.


@Lijo liên kết đó không chứa bất kỳ thông tin nào về cách lên lịch khởi động lại.
Luke Sampson

Đây chỉ là sự ngu ngốc hoàn toàn để thay thế AT bằng các nhiệm vụ không thể sử dụng. Tại sao họ không thể làm cả hai? Giật mình!
midenok

Câu trả lời:


13

Bản shutdownthân lệnh có một tham số độ trễ /tlàm trì hoãn việc tắt máy trong một số giây lên đến 10 năm. Nếu bạn muốn lên lịch tắt máy trong 14 giờ, giả sử, bạn có thể chạy

shutdown /r /t 50400

Bạn cũng có thể thêm một lý do với /dtham số hoặc nhận xét với /c; chạy shutdown /?để biết chi tiết.


9

Mặc dù tài liệu, /SDtham số dường như tương thích với /SC ONCE. Tác vụ được tạo thành công để chạy vào ngày được cung cấp, tại thời điểm được cung cấp. (Đã thử nghiệm trên W8 và W7)

Ngoài ra, tài liệu XP choschtasks.exe đến nay có thể nói /SDtham số là bắt buộc khi sử dụng /SC ONCE, vì vậy tôi tưởng tượng có một số lượng lớn các tập lệnh sử dụng kết hợp.

Thí dụ:

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>

Nếu đi ngược lại tài liệu không phù hợp với bạn, hãy xem xét việc tạo tệp XML trực tiếp ( lược đồ ở đây ), điều này chắc chắn được hỗ trợ và chắc chắn hỗ trợ một tác vụ được lên lịch để chạy một lần vào một ngày trong tương lai. Một cách dễ dàng để có được tệp thích hợp là tạo tệp đó trong Trình lập lịch tác vụ mmcđính vào và sử dụng lệnh xuất .

Thí dụ:

<?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>

Lệnh nhập:

schtasks /CREATE /TN "Task Name" /XML filename.xml

Cảm ơn các mẹo về việc /sdđược hỗ trợ. Điều đó thật thú vị về việc nhập XML quá, mặc dù cá nhân tôi không quan tâm đến việc đi ngược lại tài liệu. Vì vậy, ít nhất điều này có thể là rất nhiều, khó khăn hơn nhiều so với trước đây at.
Luke Sampson

Thú vị: /sdkhông hoạt động với /sc onceWindows Server 2008. Kết quả làERROR: Incorrect Start Date.
Luke Sampson

4
Hmm ... Tôi đã thử nghiệm thêm Server 2008 SP2 và Server 2008 R2 mà không gặp vấn đề gì. Tôi sẽ lưu ý rằng định dạng ngày được dựa trên định dạng ngày / giờ địa phương của bạn và các số 0 đứng đầu là bắt buộc. Trong cài đặt EN-us mặc định, điều này sẽ dẫn đến định dạng như thế nào /SD 06/14/2013.
Mitch

2

Cuối cùng tôi đã tạo ra runat.ps1để tái tạo một số tính năng đơn giản của at, kết hợp sự khôn ngoan từ câu trả lời của Mitch.

Cú pháp là runat (time) (command), vd

runat 2am shutdown -r -f -c "restarting the server"
runat 10:15 msg * it`'s 10:15 everyone!

Nếu bạn cũng vậy, hoài niệm về những ngày xưa tốt đẹp khi bạn không phải gõ ...

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

... sau đó bạn có thể cài đặt nó bằng cách chạy lệnh powershell này:

iex (new-object net.webclient).downloadstring('https://gist.github.com/lukesampson/5779205/raw/install.ps1');install runat https://gist.github.com/lukesampson/5778559/raw

Hoặc bạn có thể tự tải runat.ps1tập lệnh tại đây .


1
+1 Đó là một kịch bản rất hữu ích ... điều này chắc chắn sẽ có trong mục yêu thích của tôi.
Mitch

1

Tôi đã sử dụng điều này trong một kịch bản cho năm 2012 R2 và hoạt động độc đáo; Nó sẽ tạo ra một nhiệm vụ hàng ngày khởi động lại máy chủ @ 4:30 sáng

schtasks /create /ru system /rl highest /sc DAILY /tn restart /tr "shutdown /r /f /c "Restarting" /st 04:30

Vui lòng đảm bảo rằng bạn chạy nó từ một dấu nhắc CMD với đặc quyền Quản trị.

Andy


1

Chỉ cần một tập lệnh powershell khác để khởi động lại máy tính theo chương trình vào ngày hôm sau vào thời gian được chỉ định

$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

0

Tôi đề nghị sử dụng lệnh scht task với tham số / f.

Sử dụng / f, nếu có một tác vụ có cùng tên, nó đã được sửa đổi.

Nó rất hữu ích để triển khai các tác vụ thông qua kịch bản.

Một ví dụ đầy đủ về khởi động lại máy chủ lịch trình:

schtasks /create /ru system /rl highest /sc DAILY /tn Reinicio /tr "shutdown /r /f /t 0 /c "Reinicio"" /st 22:30 /F

Trích xuất từ: http://www.sysadmit.com/2016/09/windows-programar-apagado-o-reinermo-automatico.html


0

Nếu mục tiêu chỉ đơn giản là khởi động lại sau khi cài đặt các bản cập nhật, thì bạn có thể sử dụng mô-đun PSWindowsUpdate để cài đặt các bản cập nhật. Bạn có thể tải nó từ đây . Sau khi cài đặt, chỉ cần mở Powershell và gõ

Get-WuInstall -AcceptAll -AutoReboot

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.