مڪمل Minecraft سرور شروعاتي اسڪرپٽ

مڪمل Minecraft سرور شروعاتي اسڪرپٽ

ليکڪ راند کي تمام گهڻو پيار ڪندو آهي، ۽ هو پاڻ هڪ ننڍڙي سرور جو منتظم آهي "خالص دوستن لاء." جيئن ته شوقين جي وچ ۾ معمول آهي، سرور تي هر شيء تبديل ڪئي وئي آهي، ۽ اهو عدم استحڪام ۾ داخل ٿئي ٿو ۽ نتيجي طور، حادثا. جيئن ته پاور شيل جو ليکڪ پنهنجي گلي تي اسٽورن جي جڳهه کان بهتر ڄاڻي ٿو، هن ٺاهڻ جو فيصلو ڪيو.Minecraft 2020 لانچ ڪرڻ لاءِ بهترين اسڪرپٽ" ساڳئي رسم الخط ۾ ٽيمپليٽ جي بنياد طور ڪم ڪيو ويو Ruvds مارڪيٽ. پر سڀ ذريعا اڳ ۾ ئي مضمون ۾ آهن. هاڻي، ترتيب ۾، اهو سڀ ڪجهه ڪيئن ڪيو ويو.

اسان کي گهربل حڪم

متبادل لاگنگ

هڪ ڏينهن، ڪجهه وڌيڪ موڊ نصب ڪرڻ کان پوء، مون دريافت ڪيو ته سرور، ظاهري طور تي، جنگ جو اعلان ڪرڻ کان سواء تباهه ٿي رهيو هو. سرور تازو. log يا ڊيبگ ۾ غلطيون نه لکيو، ۽ ڪنسول، جنهن کي نظريي ۾ هن غلطي کي لکڻ گهرجي ۽ بند ڪيو ويو، بند ڪيو ويو.

جيڪڏهن هو لکڻ نٿو چاهي، ته هن کي ضرورت ناهي. اسان وٽ پاور شيل آهي cmdlet سان ٽي شئي، جيڪو هڪ اعتراض وٺندو آهي ۽ ان کي هڪ فائل ۽ ڪنسول ڏانهن هڪ ئي وقت ڪڍي ٿو.

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

هن طريقي سان، پاور شيل کي کڻندو StandardOutput ۽ ان کي فائل ۾ لکندو. استعمال ڪرڻ جي ڪوشش نه ڪريو شروع- عملڇاڪاڻ ته اهو واپس ڪندو System.ComponentModel.Component ۽ نه StandardOutput، ۽ -RedirectStandardOutput ان کي ڪنسول ۾ داخل ٿيڻ ناممڪن بڻائيندو، جنهن کان بچڻ چاهيون ٿا.

دلائل شروع ڪريو

انسٽال ڪرڻ کان پوءِ ساڳي جوڙو موڊ، ليکڪ محسوس ڪيو ته سرور وٽ به ڪافي ريم نه هئي. ۽ ان کي تبديل ڪرڻ جي ضرورت آهي لانچ دلائل. ان کي تبديل ڪرڻ بدران start.bat ۾ هر وقت، جيڪو هرڪو استعمال ڪري ٿو، بس هي اسڪرپٽ استعمال ڪريو.

جيئن ته Tee-Object صرف StandardOutput پڙهي ٿو جڏهن executable سڏيو ويندو آهي "بس هن وانگر"، توهان کي ٻيو اسڪرپٽ ٺاهڻو پوندو. هي اسڪرپٽ پاڻ Minecraft پاران لانچ ڪيو ويندو. اچو ته دليلن سان شروع ڪريون.

مستقبل ۾ حتمي سستيءَ ۾ مبتلا ٿيڻ لاءِ، اسڪرپٽ کي لازمي طور تي اڏامڻ شروع ڪرڻ جا دليل گڏ ڪرڻ گهرجن. هن کي ڪرڻ لاء، اچو ته جديد نسخو ڳولڻ سان شروع ڪريون فورٽ.

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

sort-object استعمال ڪندي، اسان هميشه اعتراض کي سڀ کان وڏي انگ سان کڻنداسين، ان کان سواءِ توهان انهن مان ڪيترا به اتي رکو. انتهائي سستي.

ھاڻي توھان کي ضرورت آھي ميموري کي سرور ڏانھن تفويض ڪرڻ. هن کي ڪرڻ لاء، سسٽم ميموري جي رقم وٺو ۽ ان جي مقدار کي اسٽرنگ ۾ لکو.

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

صحيح خودڪار ٻيهر شروع ڪريو

ليکڪ ٻين ماڻهن جون .bat فائلون ڏٺيون آهن، پر انهن سرور جي بند ٿيڻ جو سبب نه ورتو. اها تڪليف آهي، جيڪڏهن توهان کي صرف موڊ فائل تبديل ڪرڻ يا ڪجهه ختم ڪرڻ جي ضرورت آهي؟
هاڻي اچو ته هڪ مناسب ٻيهر شروع ڪريو. ليکڪ اڳ ۾ ئي عجيب اسڪرپٽ ۾ آيو هو جنهن سرور کي ٻيهر شروع ڪيو، قطع نظر ته سرور بند ڇو ٿيو. اسان exitcode استعمال ڪنداسين. جاوا استعمال ڪري ٿو 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

هي سڀ شامل ڪري سگھجي ٿو فائل ۾ شامل ڪريو مواد استعمال ڪندي. ان کي ٿورو گڏ ڪرڻ سان، اسان هي اسڪرپٽ حاصل ڪيو، ۽ اچو ته ان کي سڏين 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

ھاڻي اچو ھڪڙو اسڪرپٽ ٺاھيو جيڪو لانچ ڪري ٿو handler.

صحيح شروعات

ليکڪ چاهي ٿو Minecraft جي مختلف ورزن کي ڪنهن به رستي کان هڪ ماڊل ۾ هلائڻ، ۽ پڻ هڪ مخصوص فولڊر ۾ لاگ محفوظ ڪرڻ جي قابل ٿي.

مسئلو اهو آهي ته اهو عمل هڪ صارف طرفان شروع ڪيو وڃي جيڪو سسٽم ۾ لاگ ان ٿيل آهي. اهو ٿي سگهي ٿو ڊيسڪ ٽاپ يا WinRm ذريعي. جيڪڏهن توهان سرور هلائيندا آهيو هڪ سسٽم يوزر يا ايڊمنسٽريٽر جي طور تي، پر لاگ ان نه ٿيو ته پوءِ 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

اهو محفوظ ناهي. لاگ ان ۽ پاسورڊ هتي سادي متن ۾ ظاهر ڪيا ويا آهن، تنهنڪري سرور کي شروع ڪرڻ لاء توهان کي هڪ الڳ صارف ٺاهڻ جي ضرورت آهي جيڪو صارف جي سطح تي، يا اڃا به وڌيڪ تنگ گروپ ۾. اهو سختي سان هن لاء هڪ معياري منتظم استعمال ڪرڻ جي سفارش نه آهي.

اسان خودڪار لاگ ان کي ترتيب ڏنو. هاڻي توهان کي سرور لاءِ هڪ نئون ڪم رجسٽر ڪرڻ جي ضرورت آهي. اسان پاور شيل کان حڪم هلائينداسين، تنهنڪري اهو هن طرح نظر ايندو:

$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

پهرين، اچو ته هڪ ماڊل ٺاهيو جيڪو هڪ اسڪرپٽ هلائڻ کان سواء ٻيو ڪجهه نه ڪندو جيڪو ٻڌندو ۽ معياري آئوٽ رڪارڊ ڪندو.

پيرا ميٽر بلاڪ ۾، هو پڇي ٿو ته ڪهڙي فولڊر مان 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

۽ توهان کي هن طرح 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

رجسٽر-آٽوولوگون

پيرا ميٽرز بلاڪ ۾، اسڪرپٽ يوزرنيم ۽ پاسورڊ پيرا ميٽرز کي قبول ڪري ٿي. جيڪڏهن استعمال ڪندڙ جو نالو بيان نه ڪيو ويو آهي، موجوده استعمال ڪندڙ جو نالو استعمال ڪيو ويندو.

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 سرور شروعاتي اسڪرپٽ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو