ደራሲው ጨዋታውን በጣም ይወዳል, እና እሱ ራሱ "ለጓደኞች ብቻ" የአንድ ትንሽ አገልጋይ አስተዳዳሪ ነው. በአማተሮች መካከል እንደተለመደው በአገልጋዩ ላይ ያለው ነገር ሁሉ ተስተካክሏል፣ እና ይሄ የስራ አለመረጋጋትን እና በውጤቱም ውድቀትን ያስከትላል። ደራሲው ፓወርሼልን በመንገድ ላይ ካሉት መደብሮች አካባቢ በተሻለ ስለሚያውቅ ለማድረግ ወሰነ።Minecraft 2020ን ለመጀመር ምርጥ ስክሪፕት". ያው ስክሪፕት ለአብነት መሰረት ሆኖ አገልግሏል።
የምንፈልጋቸው ትዕዛዞች
አማራጭ ምዝግብ ማስታወሻ
አንድ ጊዜ ሁለት ተጨማሪ ሞዶችን ከጫንኩ በኋላ አገልጋዩ ጦርነት ሳያውጅ እየወደቀ እንደሆነ አገኘሁ። አገልጋዩ በ latest.log ወይም debug ላይ ስህተቶችን አልጻፈም, እና ኮንሶሉ, በንድፈ ሀሳብ, ይህንን ስህተት ይጽፋል እና ይቆማል, ተዘግቷል.
መፃፍ ካልፈለግክ አትፃፍ። ከcmdlet ጋር Powershell አለን። ቲ-ነገር, አንድን ነገር ወስዶ ወደ ፋይል እና ወደ ኮንሶል በአንድ ጊዜ ያወጣል.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
ስለዚህ Powershell StandardOutput ን ያነሳና ወደ ፋይል ይጽፋል። ለመጠቀም አይሞክሩ ጅምር-ሂደት።, ምክንያቱም ስርዓቱን ይመልሳል.ComponentModel.Component, StandardOutput ሳይሆን, እና -RedirectStandardOutput ወደ ኮንሶል መተየብ የማይቻል ያደርገዋል, ይህም እኛ ልናስወግደው የምንፈልገው ነው.
ክርክሮችን አስጀምር
ተመሳሳይ ጥንድ ሞዶችን ከጫኑ ደራሲው አገልጋዩ እንዲሁ በቂ ራም እንደሌለው አስተውሏል። እና የማስጀመሪያ ክርክሮችን መለወጥ አስፈላጊ ነው. ሁሉም ሰው በሚጠቀምበት start.bat ውስጥ ሁል ጊዜ ከመቀየር ይልቅ ይህን ስክሪፕት ብቻ ይጠቀሙ።
Tee-Object StandardOutputን ስለሚያነብ ፈጻሚው "ልክ እንደዛ" ተብሎ ሲጠራ ብቻ አንድ ተጨማሪ ስክሪፕት መደረግ አለበት። ይህ ስክሪፕት minecraft ራሱ ይሰራል። በክርክር እንጀምር።
ለወደፊቱ የመጨረሻ ስንፍና ውስጥ ለመግባት ስክሪፕቱ በበረራ ላይ የማስነሻ ክርክሮችን መሰብሰብ አለበት። ይህንን ለማድረግ የቅርብ ጊዜውን ስሪት በመፈለግ እንጀምር መጭመቅ.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
በመደብር-ነገር ፣ ምንም ያህል እዚያ ቢያስቀምጡ ሁል ጊዜ ትልቁን ቁጥር ያለውን ነገር እንወስደዋለን። የመጨረሻ ስንፍና።
አሁን ማህደረ ትውስታን ለአገልጋዩ መስጠት አለብን. ይህንን ለማድረግ የስርዓት ማህደረ ትውስታውን መጠን እንወስዳለን እና መጠኑን ወደ ሕብረቁምፊ እንጽፋለን።
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
ትክክለኛ ራስ-ሰር ዳግም ማስጀመር
ደራሲው ከሌሎች ሰዎች የባት ፋይሎችን አይቷል፣ ነገር ግን አገልጋዩ የቆመበትን ምክንያት ግምት ውስጥ አላስገቡም። የማይመች ነው፣ የሞድ ፋይሉን መቀየር ወይም የሆነ ነገር መሰረዝ ብቻ ከፈለጉስ?
አሁን ትክክለኛውን ዳግም ማስጀመር እናድርግ። ደራሲው ለምን አገልጋዩ የወጣበት ምክንያት ምንም ይሁን ምን አገልጋዩን እንደገና ያስጀመሩ እንግዳ ስክሪፕቶች አጋጥሟቸዋል። መውጫ ኮድ እንጠቀማለን። ጃቫ 0ን እንደ ስኬት ይጠቀማል ስለዚህ ከዚያ እንጨፍር።
በመጀመሪያ፣ ካልተሳካ አገልጋዩን እንደገና የሚያስጀምር ተግባር እንፍጠር።
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
የ/ማቆሚያ ትዕዛዙን በመጠቀም አገልጋዩ በተለምዶ ከራሱ ኮንሶል እስኪወጣ ድረስ ስክሪፕቱ በሎፕ ውስጥ ይቆያል።
ሁሉንም ነገር በራስ-ሰር ለማድረግ ከወሰንን ፣ ከዚያ የሚጀመርበትን ቀን ፣ የሚያበቃበትን ቀን እና እንዲሁም የፍጻሜውን ምክንያት መሰብሰብ ጥሩ ነው።
ይህንን ለማድረግ የ Start-Process ውጤቱን ወደ ተለዋዋጭ እንጽፋለን. በስክሪፕት ውስጥ ይህን ይመስላል፡-
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
እና ከዚያ ውጤቱን ወደ ፋይል ይፃፉ። በተለዋዋጭ ወደ እኛ የተመለሰው እነሆ፡-
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
ይህ ሁሉ ተጨማሪ ይዘትን በመጠቀም ወደ ፋይሉ ሊታከል ይችላል. ትንሽ ከቦርሽ በኋላ፣እንዲህ አይነት ስክሪፕት እናገኛለን፣ነገር ግን ተቆጣጣሪ ብለን እንጠራዋለን።ps1.
Add-Content -Value "Start time:" -Path $Logfile
$global:Process.StartTime
Add-Content -Value "Exit code:" -Path $Logfile
$global:Process.ExitCode | Add-Content $Logfile
Add-Content -Value "Exit time:" -Path $Logfile
$global:Process.ExitTime | Add-Content $Logfile
አሁን ስክሪፕቱን ከተቆጣጣሪው ጅምር ጋር እንየው።
ትክክለኛ አውቶማቲክ ጭነት
ደራሲው ፈንጂዎችን ከተለያዩ ስሪቶች ከአንድ ሞጁል ጋር ማስኬድ ይፈልጋል ፣ እና ምዝግብ ማስታወሻዎችን በአንድ የተወሰነ አቃፊ ውስጥ ማስገባት ይችላል።
ችግሩ ሂደቱ በገባው ተጠቃሚ መጀመር አለበት. ይህ በዴስክቶፕ ወይም በዊንአርም በኩል ሊከናወን ይችላል. አገልጋዩን እንደ ሲስተም ወይም እንደ አስተዳዳሪ ብታሄዱት ግን ካልገባህ Server.jar eula.txt አንብቦ እንኳን አይጀምርም።
ወደ መዝገብ ቤቱ ሶስት ግቤቶችን በማከል አውቶሎጎን ማንቃት እንችላለን።
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1 -ErrorAction SilentlyContinue
አስተማማኝ አይደለም. መግቢያው እና የይለፍ ቃሉ እዚህ ላይ በግልጽ በተገለጸው ጽሑፍ ተጠቁመዋል፣ ስለዚህ አገልጋዩን ለመጀመር በተጠቃሚ ደረጃ ወይም በጠባብ ቡድን ውስጥ የተለየ ተጠቃሚ መፍጠር ያስፈልግዎታል። ለዚህ መደበኛ አስተዳዳሪን መጠቀም በጥብቅ የተከለከለ ነው።
አውቶሎጅንን አውቀናል. አሁን ለአገልጋዩ አዲስ ተግባር መመዝገብ አለብዎት. ትዕዛዙን ከPowershell እናሄዳለን፣ ስለዚህ የሚከተለውን ይመስላል፡-
$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest
ሞጁሉን በማገጣጠም ላይ
አሁን ሁሉንም ነገር በኋላ ጥቅም ላይ ሊውሉ በሚችሉ ሞጁሎች ውስጥ እናቀናጅ. ሁሉም የተዘጋጁ ስክሪፕቶች ኮድ እዚህ አለ፣ አስመጣ እና ተጠቀም።
በሞጁሎች መጨነቅ ካልፈለጉ ከላይ የተገለጹትን ሁሉንም ነገሮች ለየብቻ መጠቀም ይችላሉ.
minecraft ጀምር
በመጀመሪያ፣ ወደ መደበኛ ውፅዓት የሚያዳምጥ እና የሚጽፍ ስክሪፕት ከማሄድ በቀር ምንም የማይሰራ ሞጁል እንስራ።
በፓራሜትር እገዳው ውስጥ ፈንጂዎችን ለመጀመር ከየትኛው አቃፊ እና ምዝግብ ማስታወሻውን የት እንደሚያስቀምጥ ይጠይቃል.
Set-Location (Split-Path $MyInvocation.MyCommand.Path)
function Start-Minecraft {
[CmdletBinding()]
param (
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]
$LogFile,
[Parameter(Mandatory)]
[ValidateSet('Vanilla', 'Forge')]
[ValidateNotNullOrEmpty()]
[string]
$Type,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string[]]
$MinecraftPath
)
powershell.exe -file .handler.ps1 -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append
}
Export-ModuleMember -Function Start-Minecraft
እና ፈንጂዎችን በሚከተለው መንገድ ማሄድ ያስፈልግዎታል
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
አሁን ወደ ዝግጁ-አጠቃቀም Handler.ps1 እንሂድ
የእኛ ስክሪፕት ሲጠራ መለኪያዎችን እንዲቀበል፣ እንዲሁም የመለኪያ እገዳን መግለጽ አለብን። እባክዎን Oracle Java ን እንደሚያሄድ ልብ ይበሉ ፣ የተለየ ስርጭት እየተጠቀሙ ከሆነ ፣ ወደ ተፈፃሚው ፋይል ዱካውን መለወጥ ያስፈልግዎታል።
param (
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$type,
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$MinecraftPath,
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$StandardOutput
)
Set-Location $MinecraftPath
function Restart-Minecraft {
Write-host "=============== Starting godlike game server ============"
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -first 1
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
}
function Write-Log {
Write-host "Start time:" $global:Process.StartTime
Write-host "Exit code:" $global:Process.ExitCode
Write-host "Exit time:" $global:Process.ExitTime
Write-host "=============== Stopped godlike game server ============="
}
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Restart-Minecraft
Write-Log
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Get-MinecraftExitCode
minecraft ይመዝገቡ
ስክሪፕቱ አዲስ ተግባር ብቻ ከመመዝገብ በስተቀር ከ Start-Minecraft ጋር ተመሳሳይ ነው። ተመሳሳይ ክርክሮችን ይቀበላል. የተጠቃሚ ስም, ካልተገለጸ, የአሁኑን ይወስዳል.
function Register-Minecraft {
[CmdletBinding()]
param (
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]
$LogFile,
[Parameter(Mandatory)]
[ValidateSet('Vanilla', 'Forge')]
[ValidateNotNullOrEmpty()]
[string]$Type,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string]$MinecraftPath,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string]$User,
[Parameter(Mandatory)]
[string]$TaskName = $env:USERNAME
)
$Trigger = New-ScheduledTaskTrigger -AtLogOn
$arguments = "Start-Minecraft -Type $Type -LogFile $LogFile -MinecraftPath $MinecraftPath"
$PS = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-noexit -command $arguments"
Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $PS -RunLevel Highest
}
Export-ModuleMember -Function Register-Minecraft
ይመዝገቡ-Autologon
በፓራሜትር እገዳ ውስጥ, ስክሪፕቱ የተጠቃሚ ስም እና የይለፍ ቃል መለኪያዎችን ይቀበላል. የተጠቃሚ ስም ካልተገለጸ የአሁኑ ተጠቃሚ ስም ጥቅም ላይ ይውላል።
function Set-Autologon {
param (
[Parameter(
HelpMessage="Username for autologon")]
$Username = $env:USERNAME,
[Parameter(Mandatory=$true,
HelpMessage="User password")]
[ValidateNotNullOrEmpty()]
$Password
)
$i = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
if ($null -eq $i) {
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
Write-Verbose "Set-Autologon will enable user auto logon."
}
else {
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
}
Write-Verbose "Autologon was set successfully."
}
ይህን ስክሪፕት ማስኬድ ይህን ይመስላል፡-
Set-Autologon -Password "PlaintextPassword"
እንዴት መጠቀም እንደሚቻል
አሁን ደራሲው ራሱ እነዚህን ሁሉ እንዴት እንደሚጠቀም አስቡበት. Minecraft ህዝባዊ አገልጋይን በዊንዶውስ ላይ እንዴት በትክክል ማሰማራት እንደሚቻል። ከመጀመሪያው እንጀምር።
1. ተጠቃሚ ይፍጠሩ
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. ስክሪፕቱን ለማስኬድ ስራውን ያስመዝግቡ
በሚከተለው ሞጁል መመዝገብ ይችላሉ፡-
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
ወይም መደበኛ መሳሪያዎችን ይጠቀሙ፡-
$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest
3. ራስ-ሰር መግቢያን ያብሩ እና ማሽኑን እንደገና ያስነሱ
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
ማጠናቀቅ
ደራሲው ስክሪፕቱን የሰራው ለራሱም ጭምር ነው፣ስለዚህ ስክሪፕቱን ለማሻሻል የሰጡትን ሃሳቦች ለማዳመጥ ደስተኛ ይሆናል። ደራሲው ይህ ሁሉ ኮድ ቢያንስ ለእርስዎ ጠቃሚ እንደነበረ ተስፋ ያደርጋል ፣ እና ጽሑፉ አስደሳች ነው።
ምንጭ: hab.com