Aksara ngamimitian server Minecraft sampurna

Aksara ngamimitian server Minecraft sampurna

Panulis resep pisan kana kaulinan, sareng anjeunna nyalira mangrupikeun pangurus server leutik "murni pikeun réréncangan." Sakumaha biasa diantara amatir, sagalana dina server ieu modded, sarta ieu merlukeun instability sarta, salaku hasilna, ngadat. Kusabab panulis Powershell terang langkung saé tibatan lokasi toko di jalanna, anjeunna mutuskeun pikeun ngadamel "Skrip pangsaéna pikeun ngaluncurkeun Minecraft 2020" Aksara sarua dilayanan salaku dadasar pikeun template di pasar Ruvds. Tapi sadaya sumberna parantos aya dina tulisan. Ayeuna, dina urutan, kumaha eta sadayana rengse.

Paréntah urang peryogi

logging alternatif

Hiji dinten, saatos masang sababaraha mods deui, kuring mendakan yén server, katingalina, nabrak tanpa nyatakeun perang. Server henteu nyerat kasalahan dina latest.log atanapi di debug, sareng konsol, anu dina téori kedah nyerat kasalahan ieu sareng dieureunkeun, ditutup.

Upami anjeunna henteu hoyong nyerat, anjeunna henteu kedah. Simkuring gaduh Powershell kalawan cmdlet Tee-Objék, nu nyandak hiji obyék sarta outputs kana file jeung konsol dina waktos anu sareng.

.handler.ps1 | Tee-Object .StandardOutput.txt -Append

Ku cara ieu, Powershell bakal nyandak StandardOutput sareng nyerat kana file. Ulah coba ngagunakeun Mimitian-Proséssabab bakal balik System.ComponentModel.Component teu StandardOutput, sarta -RedirectStandardOutput bakal nyieun teu mungkin pikeun asup kana konsol nu, nu naon urang hayang ulah aya.

Ngajalankeun argumen

Saatos masang pasangan mods anu sami, panulis ningali yén server ogé henteu gaduh cukup RAM. Sareng ieu peryogi ngarobih argumen peluncuran. Gantina ngarobah aranjeunna unggal waktu di start.bat, nu dulur migunakeun, ngan make Aksara ieu.

Kusabab Tee-Objék ngan maca StandardOutput nalika laksana disebut "Sapertos Ieu", anjeun kedah ngadamel naskah anu sanés. Skrip ieu bakal diluncurkeun ku Minecraft sorangan. Hayu urang mimitian ku argumen.

Dina raraga indulge dina puguh pamungkas dina mangsa nu bakal datang, naskah kudu ngumpulkeun argumen peluncuran on laleur. Jang ngalampahkeun ieu, hayu urang mimitian ku milarian versi panganyarna forge.

$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1

Ngagunakeun diurutkeun-obyek, urang bakal salawasna nyandak obyék kalawan jumlah pangbadagna, euweuh urusan sabaraha di antarana anjeun nempatkeun aya. Puguh pamungkas.

Ayeuna anjeun kudu napelkeun memori ka server. Jang ngalampahkeun ieu, nyandak jumlah memori sistem jeung nulis jumlah na dina string.

$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"

Ngalereskeun balikan deui otomatis

Panulis geus katempo file .bat ti jalma séjén, Tapi maranéhna teu tumut kana akun alesan naha server dieureunkeun. Ieu henteu pikaresepeun, kumaha upami anjeun ngan ukur kedah ngarobih file mod atanapi ngahapus hiji hal?
Ayeuna hayu urang balikan deui anu leres. Panulis saméméhna datang di sakuliah Aksara aneh nu restarted server paduli naha server pareum. Urang bakal ngagunakeun exitcode. Java ngagunakeun 0 salaku kasuksésan, jadi urang bakal tari ti dieu.

Kahiji, hayu urang nyieun hiji fungsi nu bakal balikan deui server lamun gagal.

function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Write-Log
            Restart-Minecraft
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}

Skrip bakal tetep dina loop dugi server pareum normal tina konsol sorangan nganggo paréntah / stop.

Upami urang mutuskeun pikeun ngajadikeun otomatis sadayana, maka langkung saé pikeun ngumpulkeun tanggal mimiti, tanggal parantosan, sareng ogé alesan parantosan.

Jang ngalampahkeun ieu, urang nulis hasil Start-Proses kana variabel. Dina naskah sigana kieu:

$global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru

Teras we nyerat hasil kana file. Ieu naon anu dipulangkeun ka kami dina variabel:

$global:Process.StartTime
$global:Process.ExitCode	
$global:Process.ExitTime

Sadaya ieu tiasa ditambihan kana file nganggo Add-Content. Sanggeus combed eta saeutik, urang meunang naskah ieu, sarta hayu urang nelepon deui handler.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

Ayeuna hayu urang nyieun skrip anu ngajalankeun Handler.

ngamimitian bener

Panulis hoyong ngajalankeun vérsi anu béda tina Minecraft tina jalur mana waé dina hiji modul, sareng ogé tiasa nyimpen log dina polder khusus.

Masalahna nyaéta prosésna kedah dimimitian ku pangguna anu asup kana sistem. Ieu tiasa dilakukeun via desktop atanapi WinRm. Lamun ngajalankeun server salaku pamaké sistem atawa malah administrator, tapi teu asup, lajeng Server.jar moal malah bisa maca eula.txt tur mimitian.

Urang tiasa ngaktipkeun login otomatis ku nambahkeun tilu éntri kana pendaptaran.

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

Éta henteu aman. Login sareng kecap akses dituduhkeun di dieu dina plaintext, janten pikeun ngamimitian server anjeun kedah nyiptakeun pangguna anu misah anu ngagaduhan aksés dina tingkat pangguna, atanapi dina grup anu langkung sempit. Ieu mastikeun teu dianjurkeun ngagunakeun administrator baku pikeun ieu.

Urang nyortir kaluar otomatis-login. Ayeuna anjeun kedah ngadaptarkeun tugas énggal pikeun server. Kami bakal ngajalankeun paréntah ti Powershell, janten sapertos kieu:

$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

Ngarakit modul

Ayeuna hayu urang nempatkeun sadayana kana modul anu tiasa dianggo engké. Sadaya kode pikeun naskah anu siap-siap aya di dieu, impor sareng dianggo.

Anjeun tiasa nganggo sadayana anu dijelaskeun di luhur nyalira upami anjeun henteu hoyong ngaganggu modul.

Mimitian-Minecraft

Kahiji, hayu urang nyieun modul nu bakal ngalakukeun nanaon leuwih ti ngajalankeun skrip nu bakal ngadangukeun tur ngarekam standardoutput.

Dina blok parameter, anjeunna naroskeun ti mana folder pikeun ngaluncurkeun Minecraft sareng dimana nempatkeun log.

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

Sareng anjeun kedah ngaluncurkeun Minecraft sapertos kieu:

Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"

Ayeuna hayu urang ngaléngkah ka Handler.ps1 anu siap dianggo

Supados Aksara urang narima parameter nalika disebut, urang ogé kudu nangtukeun blok parameter. Punten dicatet, éta ngajalankeun Oracle Java, upami anjeun nganggo distribusi anu béda anjeun kedah ngarobih jalur kana file anu tiasa dieksekusi.

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

Ngadaptar-Minecraft

Naskah praktis sami sareng Start-Minecraft, kecuali ngan ukur ngadaptarkeun tugas énggal. Narima argumen anu sarua. Ngaran pamaké, lamun teu dieusian, nyokot nu ayeuna.

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

Ngadaptar-Autologon

Dina blok parameter, naskah narima parameter Ngaran pamaké sarta Sandi. Lamun Ngaran pamaké teu dieusian, ngaran pamaké ayeuna dipaké.

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."
 
}

Ngajalankeun skrip ieu sapertos kieu:

Set-Autologon -Password "PlaintextPassword"

Kumaha carana nganggo

Ayeuna hayu urang nempo kumaha pangarang sorangan migunakeun sakabéh ieu. Kumaha leres nyebarkeun server Minecraft umum dina Windows. Hayu urang mimitian ti mimiti pisan.

1. Jieun pamaké

$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword

2. Ngadaptarkeun tugas pikeun ngajalankeun naskah

Anjeun tiasa ngadaptar nganggo modul sapertos kieu:

Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"

Atawa nganggo alat standar:

$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. Aktipkeun login otomatis tur reboot mesin

Set-Autologon -Username "MinecraftServer" -Password "Qw3"

parantosan

Panulis ngadamel naskah, kalebet nyalira, janten anjeunna bakal resep ngadangukeun saran anjeun pikeun ningkatkeun naskah. Panulis ngaharepkeun yén sadaya kode ieu sahenteuna sahenteuna mangpaat pikeun anjeun, sareng tulisan éta pikaresepeun.

Aksara ngamimitian server Minecraft sampurna

sumber: www.habr.com

Tambahkeun komentar