미리 지정된 시간에 다시 시작할 스크립트를 만들었습니다. 불행히도, 그것은 시간을 확인하는 동안 나는 CPU 사용 문제로 실행합니다. 그냥 실행되고 실행됩니다 (while 루프의 본질이라고 가정합니다). 나는 이것을하는 더 좋은 방법을 찾고있다.Powershell 루프 및 최적화 중
그래서 기본적으로 나는 그것이 예를 들어, 찾는 것을 그에게 시간을 가지고 설정을 가지고 : 12:00
그때 잠시를 실행하고 그것을 12:00 안타 후 몇 가지와 실행을 실행 할 때까지 계속 실행 다시 다음 시간 간격으로.
흥미롭게도 리소스 마인이고 극도로 비효율적 일 것이라는 점을 충분히 염두에 두었습니다.
그래서 내 질문은 내가 특정 간격으로 무언가를 다시 시작하고 싶지만 매초/밀리 초를 확인하지 않으려면 어떻게해야하는지에 관해 제시합니다.
사람들이 게임에서 경고해야하기 때문에 게임 서버 프로세스가 다시 시작되고 타이밍이 중요합니다.
생존을위한 스크립트가 포함됩니다.
$CurrentTime = Get-Date -UFormat "%R"
$debug = "true"
$Times = "12:00", "13:00", "01:00", "14:12"
$servers = "Notepad"
$aff = "C4", "38"
$scriptRun = 0
$serverCount = 1
$startedServers
$loop = 1
function checkServers
{
if ($debug -eq "true") { Write-Output "Entering Loop ::: $loop" }
while($loop -eq 1)
{
if ($CurrentTime -eq $Times[1] -or $CurrentTime -eq $Times[2] -or $CurrentTime -eq $Times[3] -or $CurrentTime -eq $Times[4])
{
stopServers
foreach($i in $servers)
{
if ($debug -eq "true") { Write-Output "The Server being started is $server" }
startServer([ref]$servers[$i])
}
$loop = 0
} else {
$loop = 1
checkServers
}
}
}
function waits
{
Start-Sleep -seconds 61
$loop = 1
checkServers
}
function stopServers
{
if ($scriptRun -eq 1)
{
foreach ($i in $startedServers)
{
Stop-Process -processname $startedServers[$i]
Write-Output "$startedServers[$i] has been stopped"
}
} else {
Write-Output "Starting Servers for the first time"
}
}
function startServer([ref]$server)
{
$server = $server
Start $server
$s = "$server.exe"
$instances = Get-Process $s
foreach ($s in $instances) {
$s.ProcessAffinity = $aff[$serverCount]
$serverCount = $serverCount + 1
}
if ($scriptRun -eq 0) {
$startedServers += $s
$scriptRun = 1
}
waits
Write-Output "$server was successfully started at $CurrentTime"
}
Write-Output "Starting RestartServer at $CurrentTime"
checkServers
** 그렇습니다. 아마도 다른 오류가있을 수 있습니다. 그리고 나는 가장 명백한 오류를 먼저 경험하고 나서 다른 오류를 얻을 것입니다.
특정 시간에만 작업을 실행하려는 경우 예약 된 작업을 사용하여 원하는 시간에 트리거하지 않는 것이 좋습니다. –
Windows 작업 스케줄러와 별개의 독립 실행 형 스크립트를 만들려고했지만 이것이 가장 좋은 방법 일 것입니다. –