ፍጹም Minecraft አገልጋይ ጅምር ስክሪፕት

ፍጹም Minecraft አገልጋይ ጅምር ስክሪፕት

ደራሲው ጨዋታውን በጣም ይወዳል, እና እሱ ራሱ "ለጓደኞች ብቻ" የአንድ ትንሽ አገልጋይ አስተዳዳሪ ነው. በአማተሮች መካከል እንደተለመደው በአገልጋዩ ላይ ያለው ነገር ሁሉ ተስተካክሏል፣ እና ይሄ የስራ አለመረጋጋትን እና በውጤቱም ውድቀትን ያስከትላል። ደራሲው ፓወርሼልን በመንገድ ላይ ካሉት መደብሮች አካባቢ በተሻለ ስለሚያውቅ ለማድረግ ወሰነ።Minecraft 2020ን ለመጀመር ምርጥ ስክሪፕት". ያው ስክሪፕት ለአብነት መሰረት ሆኖ አገልግሏል። Ruvds የገበያ ቦታ. ግን ሁሉም ምንጮች በጽሁፉ ውስጥ ይገኛሉ. አሁን ፣ በቅደም ተከተል ፣ ሁሉም እንዴት እንደተከናወነ።

የምንፈልጋቸው ትዕዛዞች

አማራጭ ምዝግብ ማስታወሻ

አንድ ጊዜ ሁለት ተጨማሪ ሞዶችን ከጫንኩ በኋላ አገልጋዩ ጦርነት ሳያውጅ እየወደቀ እንደሆነ አገኘሁ። አገልጋዩ በ 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"

ማጠናቀቅ

ደራሲው ስክሪፕቱን የሰራው ለራሱም ጭምር ነው፣ስለዚህ ስክሪፕቱን ለማሻሻል የሰጡትን ሃሳቦች ለማዳመጥ ደስተኛ ይሆናል። ደራሲው ይህ ሁሉ ኮድ ቢያንስ ለእርስዎ ጠቃሚ እንደነበረ ተስፋ ያደርጋል ፣ እና ጽሑፉ አስደሳች ነው።

ፍጹም Minecraft አገልጋይ ጅምር ስክሪፕት

ምንጭ: hab.com

አስተያየት ያክሉ