器永久不刪檔:基于systemd的穩(wěn)定運(yùn)行與備份方案)
很多人開過MC服務(wù)器但很少有人能把同一個(gè)存檔堅(jiān)持開一年。真正讓服務(wù)器死掉的很少是因?yàn)橛腥送婺伭烁嗍悄程炝璩糠?wù)器內(nèi)存溢出、開機(jī)之后存檔沒同步、或者換服務(wù)端時(shí)不小心把world文件夾覆蓋了。等到想恢復(fù)才發(fā)現(xiàn)備份還停留在三個(gè)月前。所謂“一輩子不刪檔”不是一句口號而是從部署架構(gòu)、自動(dòng)重啟、定時(shí)備份到容災(zāi)恢復(fù)一系列技術(shù)動(dòng)作疊加起來的結(jié)果。這篇文章圍繞“我的世界MC生存服務(wù)器 26.1.2 永久不刪檔”這個(gè)場景講清楚三件事怎么把MC服務(wù)端穩(wěn)定地跑起來、怎么用Linux系統(tǒng)服務(wù)保證它掛了能自動(dòng)拉起、怎么設(shè)計(jì)一套真正能用的備份恢復(fù)方案。標(biāo)題里那個(gè)“26.1.2”可能是你使用的整合包或者服務(wù)端框架版本標(biāo)識不同版本操作路徑多少有差異但核心邏輯是一樣的。讀完這篇文章你能得到一份可以直接照著執(zhí)行的服務(wù)器搭建和長期運(yùn)維方案。1. “一輩子不刪檔”到底難在哪里先給一個(gè)判斷搭建MC服務(wù)器從來不是技術(shù)難題真正的難點(diǎn)是“長期穩(wěn)定運(yùn)行”和“數(shù)據(jù)不丟失”。很多人的第一步就選錯(cuò)了方式。直接在Windows電腦上雙擊啟動(dòng)bat把服務(wù)器放在自己桌面上。這種方式短期玩沒問題但你想想這幾個(gè)場景電腦重啟后服務(wù)器沒跟著啟動(dòng)家里斷網(wǎng)導(dǎo)致外部玩家進(jìn)不來C盤空間被日志塞滿Windows自動(dòng)更新半夜強(qiáng)制重啟。每發(fā)生一次服務(wù)器就下線一段時(shí)間。如果玩家登錄時(shí)發(fā)現(xiàn)服務(wù)器不在線幾次之后就不會(huì)再來了。另外MC服務(wù)器數(shù)據(jù)是實(shí)時(shí)寫入的。world文件夾里保存著地圖、建筑、玩家背包、箱子物品。只要這個(gè)文件夾損壞或者被誤刪前面所有的建設(shè)進(jìn)度全部歸零。很多服務(wù)器號稱“永久”但沒有任何備份機(jī)制一旦存檔損壞整個(gè)服務(wù)器就結(jié)束了。所以要實(shí)現(xiàn)“一輩子不刪檔”技術(shù)上要做到三件事服務(wù)端能自動(dòng)重啟進(jìn)程崩潰或系統(tǒng)重啟后不需要人工介入。存檔有定期備份并且備份存在不同位置。備份有恢復(fù)驗(yàn)證不只是在硬盤上存一份文件而是確認(rèn)它真的能還原。把這三件事落地比下載服務(wù)端、開服這件事重要得多。2. 搭建前必懂的3個(gè)概念服務(wù)端、版本和“不刪檔”的含義2.1 Java版服務(wù)端與客戶端的關(guān)系Minecraft Java版的服務(wù)器是一個(gè)獨(dú)立的Java進(jìn)程。玩家通過啟動(dòng)器連接服務(wù)器IP和端口。服務(wù)端種類很多Vanilla Server官方原版服務(wù)端功能最純粹但性能一般。Spigot在插件支持上有優(yōu)勢適合加各種管理插件。PaperSpigot的高性能分支是目前社區(qū)主流的服務(wù)端之一優(yōu)化好、穩(wěn)定。Fabric / Forge適合模組生存服支持大量MOD加載。對于純生存服務(wù)器如果不想裝太多插件Paper是性價(jià)比較高的選擇。如果你想做原汁原味原版生存Vanilla也夠用。如果你要玩工業(yè)、魔法等模組服就需要Fabric或Forge。文章后續(xù)以Paper服務(wù)端為主線做演示因?yàn)樗诩嫒菰嫱娣ǖ耐瑫r(shí)提供了更好的性能和崩潰處理能力。2.2 版本號怎么選MC的Java版常規(guī)版本號類似1.20、1.21這樣的格式。標(biāo)題里的“26.1.2”很可能是某個(gè)服務(wù)端框架、整合包或者啟動(dòng)器的版本標(biāo)識而不是原版游戲版本號。版本選擇的核心原則是客戶端、服務(wù)端、插件三者的版本必須匹配。比如服務(wù)端用的是1.21玩家的客戶端也應(yīng)該是1.21插件也必須兼容1.21。如果版本不匹配玩家會(huì)看到“Outdated Client”或者“Incompatible”的報(bào)錯(cuò)。不刪檔服務(wù)器建議選一個(gè)已經(jīng)相對穩(wěn)定的版本不要一有新版本就馬上升級。每次大版本升級都可能帶來插件不兼容、存檔格式變化、世界邊界變化等問題。穩(wěn)定運(yùn)營比追求新特性更重要。2.3 “不刪檔”的三個(gè)層次第一層是“數(shù)據(jù)不刪”。world文件夾里有玩家花幾個(gè)月建成的建筑不能說沒就沒。第二層是“服務(wù)不刪”。服務(wù)器進(jìn)程不能動(dòng)不動(dòng)就退出機(jī)器重啟或進(jìn)程崩潰后要能自動(dòng)恢復(fù)。第三層是“規(guī)則不刪”。一個(gè)能長期運(yùn)營的服務(wù)器通常有清晰的規(guī)則、白名單和公告玩家之間形成穩(wěn)定的社區(qū)。這一層是運(yùn)營問題但好的技術(shù)架構(gòu)能減少運(yùn)營者的精力消耗。這篇文章主要解決前兩層第三層會(huì)在最佳實(shí)踐部分給出建議。3. 環(huán)境準(zhǔn)備一臺能撐住“一輩子”的服務(wù)器3.1 系統(tǒng)選擇推薦使用Linux服務(wù)器。如果之前只接觸過Windows也不用害怕下面所有命令都給出了完整步驟。Ubuntu 22.04 LTS或Debian 12都是不錯(cuò)的選擇長期支持版本更新周期長適合穩(wěn)定運(yùn)行。如果只有Windows服務(wù)器思路也類似只是常駐服務(wù)和定時(shí)任務(wù)要用計(jì)劃任務(wù)實(shí)現(xiàn)。不過從運(yùn)維便利性上講Linux systemd的方案要優(yōu)雅得多。3.2 Java運(yùn)行環(huán)境Minecraft Java版服務(wù)端依賴Java運(yùn)行環(huán)境。不同版本的MC對Java版本要求不同1.17以下Java 8或Java 111.17及以上Java 17或更高1.20.5及以上通常需要Java 21安裝Java 17的命令sudo apt update sudo apt install openjdk-17-jre-headless -y安裝后確認(rèn)版本java -version如果顯示的是OpenJDK 17.x.x就說明環(huán)境就緒。如果項(xiàng)目操作手冊要求Java 21可以把版本號替換成21例如安裝openjdk-21-jre-headless。要特別注意服務(wù)器上有多個(gè)Java版本時(shí)啟動(dòng)腳本里最好顯式指定java路徑避免系統(tǒng)默認(rèn)版本不對導(dǎo)致服務(wù)端無法啟動(dòng)。3.3 硬件配置參考MC服務(wù)器的性能瓶頸主要在內(nèi)存和CPU單核性能。2到5個(gè)玩家2核CPU 4GB內(nèi)存可以跑。10到30個(gè)玩家4核CPU 8GB內(nèi)存更穩(wěn)妥同時(shí)要預(yù)留系統(tǒng)占用的內(nèi)存。大量玩家或地圖很大16GB內(nèi)存以上并把world放在SSD磁盤上。有個(gè)容易被忽略的點(diǎn)JVM啟動(dòng)參數(shù)里要合理設(shè)置最大堆內(nèi)存很多人直接給JVM分配整個(gè)服務(wù)器內(nèi)存結(jié)果系統(tǒng)沒有余量運(yùn)行一段時(shí)間后直接被OOM Killer殺掉。另外磁盤IO很關(guān)鍵。地圖生成、區(qū)塊加載、玩家傳送時(shí)都需要大量讀寫文件。用云服務(wù)器的系統(tǒng)盤或者SSD數(shù)據(jù)盤體驗(yàn)會(huì)好很多。服務(wù)器并發(fā)不高時(shí)CPU核心數(shù)不用太多但單核主頻越高越好因?yàn)镸C的主世界生成邏輯很多是單線程的。4. 服務(wù)端安裝與基礎(chǔ)配置4.1 創(chuàng)建運(yùn)行目錄并下載服務(wù)端建議為服務(wù)器單獨(dú)創(chuàng)建目錄不要放在root目錄下。這里以/opt/mc-server為例sudo mkdir -p /opt/mc-server cd /opt/mc-server然后下載Paper服務(wù)端。以Paper 1.21為例它的核心文件一般會(huì)以paper-1.21-xxx.jar的形式發(fā)布。你可以從Paper官網(wǎng)或者對應(yīng)倉庫拿到最新下載地址。下面示例假設(shè)下載好的文件名是paper.jar# 如果服務(wù)端文件是通過wget下載需要先確認(rèn)實(shí)際下載URL sudo wget https://example.com/path/to/paper.jar -O paper.jar注意上面URL是占位形式實(shí)際要用下載頁面提供的真實(shí)鏈接。沒有把握的情況下不要在命令行里隨便拼URL建議先從瀏覽器把文件下載到本地再通過scp上傳到服務(wù)器。4.2 首次啟動(dòng)與EULAMC服務(wù)端首次啟動(dòng)前需要修改一個(gè)重要文件eula.txt。這里必須先說明只需要同意EULA才能運(yùn)行服務(wù)端。先啟動(dòng)一次服務(wù)端讓它生成配置文件java -Xms2G -Xmx4G -jar paper.jar nogui啟動(dòng)幾秒后服務(wù)端會(huì)提示EULA未接受。按CtrlC停止進(jìn)程然后修改文件sudo nano eula.txt把eulafalse改成eulatrue。這個(gè)操作表示你同意Minecraft EULA條款屬于合法使用范圍。4.3 server.properties 核心配置再次啟動(dòng)并停止服務(wù)端后會(huì)生成server.properties。這是MC服務(wù)器的核心配置文件。以下列出幾個(gè)最關(guān)鍵的配置項(xiàng)# server.properties 關(guān)鍵配置示例 motdMy Forever MC Server server-port25565 online-modetrue max-players20 view-distance10 spawn-protection0 white-listtrue enforce-secure-profiletruemotd服務(wù)器列表里顯示的介紹文字。server-port默認(rèn)25565不需要改除非端口被占用。online-modetrue表示開啟正版驗(yàn)證。如果你想讓Java版正版玩家和離線玩家都能進(jìn)需要額外配置默認(rèn)建議保持true。max-players最大同時(shí)在線人數(shù)量力而行。view-distance視距設(shè)置過大會(huì)增加CPU和內(nèi)存壓力。spawn-protection出生點(diǎn)保護(hù)范圍設(shè)置為0避免出生點(diǎn)附近無法破壞方塊。white-list設(shè)為true后只有白名單里的玩家才能進(jìn)入服務(wù)器這對長期服務(wù)器很必要。enforce-secure-profile新版本服務(wù)端建議開啟防止非安全配置導(dǎo)致的聯(lián)機(jī)問題。改完配置后再次用同樣的java命令啟動(dòng)服務(wù)端。這次應(yīng)該能看到類似“Done (10.123s)!”的輸出說明服務(wù)器啟動(dòng)成功。4.4 添加白名單玩家白名單模式下第一次進(jìn)入服務(wù)器的玩家需要在控制臺執(zhí)行whitelist add 玩家名后續(xù)增加玩家也可以直接編輯white-list.json文件。對于管理員來說更推薦用命令而不是改文件避免JSON格式錯(cuò)誤。5. 用systemd把MC變成常駐服務(wù)現(xiàn)在服務(wù)器能手動(dòng)啟動(dòng)但關(guān)掉SSH窗口后進(jìn)程可能就沒了系統(tǒng)重啟也不會(huì)自動(dòng)拉起。這一步把啟動(dòng)過程交給systemd讓它成為Linux系統(tǒng)的一個(gè)常駐服務(wù)。5.1 創(chuàng)建啟動(dòng)腳本先寫一個(gè)啟動(dòng)腳本方便統(tǒng)一管理JVM參數(shù)和服務(wù)端文件sudo nano /opt/mc-server/start.sh內(nèi)容如下#!/bin/bash cd /opt/mc-server exec java -Xms2G -Xmx4G -jar paper.jar nogui給腳本加執(zhí)行權(quán)限chmod x /opt/mc-server/start.sh這里用了exec讓Java進(jìn)程取代當(dāng)前腳本進(jìn)程這樣systemd能正確追蹤到MC進(jìn)程的PID對后續(xù)自動(dòng)重啟有好處。5.2 創(chuàng)建systemd服務(wù)文件創(chuàng)建服務(wù)文件sudo nano /etc/systemd/system/mc-server.service寫入以下內(nèi)容[Unit] DescriptionMinecraft Server Afternetwork.target [Service] Usermcserver WorkingDirectory/opt/mc-server ExecStart/opt/mc-server/start.sh Restarton-failure RestartSec15s [Install] WantedBymulti-user.target說明Usermcserver用一個(gè)普通系統(tǒng)賬號運(yùn)行MC服務(wù)不要用root。后面會(huì)創(chuàng)建這個(gè)用戶。Restarton-failure進(jìn)程崩潰或異常退出時(shí)systemd會(huì)自動(dòng)拉起。RestartSec15s重啟前等待15秒避免頻繁崩潰時(shí)瘋狂重啟。WorkingDirectory確保服務(wù)端在/opt/mc-server目錄下運(yùn)行world文件會(huì)生成在這個(gè)目錄里。5.3 創(chuàng)建專用系統(tǒng)用戶sudo useradd -r -m -d /var/lib/mcserver mcserver然后把目錄權(quán)限給這個(gè)用戶sudo chown -R mcserver:mcserver /opt/mc-server5.4 重新加載并啟動(dòng)服務(wù)sudo systemctl daemon-reload sudo systemctl start mc-server sudo systemctl enable mc-server常用管理命令# 查看狀態(tài) sudo systemctl status mc-server # 查看實(shí)時(shí)日志 sudo journalctl -u mc-server -f # 重啟服務(wù)器 sudo systemctl restart mc-server # 停止服務(wù)器 sudo systemctl stop mc-server到這一步服務(wù)器已經(jīng)具備“掛了自動(dòng)重啟”和“開機(jī)自動(dòng)啟動(dòng)”的能力。即使服務(wù)器因?yàn)閮?nèi)存溢出崩潰systemd也會(huì)在15秒后自動(dòng)拉起來這是“不刪檔”的第二層保障。6. 備份與恢復(fù)真正“不刪檔”的關(guān)鍵穩(wěn)定運(yùn)行只是前提數(shù)據(jù)不丟才是核心。MC存檔由world文件夾構(gòu)成。備份策略要做到“定時(shí)、異地、可驗(yàn)證”三層缺一不可。6.1 備份前先安全停服或存檔直接復(fù)制world文件夾如果服務(wù)器正在寫入可能出現(xiàn)文件不一致。最簡單的方案是每次備份前執(zhí)行管理員命令save-off save-allsave-all會(huì)強(qiáng)制把內(nèi)存中所有數(shù)據(jù)寫入磁盤。執(zhí)行完后再復(fù)制world文件夾就相對安全。如果使用Paper或Spigot備份完成后執(zhí)行save-on另一種方案是使用WorldEdit或Multiverse等插件提供的快照備份插件。但插件版本可能隨著MC版本升級而失效所以服務(wù)器腳本里最好保留最直接的world文件夾打包方式。6.2 編寫定時(shí)備份腳本下面這個(gè)腳本每天凌晨4點(diǎn)把world文件夾和相關(guān)配置打成tar.gz壓縮包并且只保留最近7天的備份#!/bin/bash BACKUP_DIR/opt/mc-backups WORLD_DIR/opt/mc-server/world SERVER_DIR/opt/mc-server DATE$(date %Y%m%d-%H%M%S) KEEP_DAYS7 mkdir -p $BACKUP_DIR # 通知服務(wù)器保存數(shù)據(jù) screen -S mc-server -p 0 -X stuff save-off\n screen -S mc-server -p 0 -X stuff save-all\n # 等待5秒確保數(shù)據(jù)落盤 sleep 5 tar -czf $BACKUP_DIR/mc-$DATE.tar.gz -C $SERVER_DIR world world_nether world_the_end \ server.properties white-list.json ops.json permissions.json 2/dev/null # 恢復(fù)自動(dòng)保存 screen -S mc-server -p 0 -X stuff save-on\n # 刪除超過保留時(shí)間的舊備份 find $BACKUP_DIR -name mc-*.tar.gz -mtime $KEEP_DAYS -delete echo Backup completed: $BACKUP_DIR/mc-$DATE.tar.gz需要先解釋一下上面的腳本用到了screen。如果你用systemd管理服務(wù)MC進(jìn)程不是在screen里跑的直接往Java進(jìn)程發(fā)save-all命令不方便。更好的做法是配合RCON或者使用管理插件執(zhí)行遠(yuǎn)程指令。這里提供一個(gè)更通用的備份思路不依賴在服務(wù)端內(nèi)發(fā)命令而是先用systemctl stop mc-server做完整備份等備份完畢再啟動(dòng)。停服備份方案更可靠代價(jià)就是服務(wù)器會(huì)短暫停機(jī)幾十秒。對于每日備份而言完全值得#!/bin/bash BACKUP_DIR/opt/mc-backups SERVER_DIR/opt/mc-server DATE$(date %Y%m%d-%H%M%S) KEEP_DAYS7 mkdir -p $BACKUP_DIR echo Stopping Minecraft server... systemctl stop mc-server tar -czf $BACKUP_DIR/mc-$DATE.tar.gz -C $SERVER_DIR world server.properties white-list.json ops.json permissions.json echo Starting Minecraft server... systemctl start mc-server find $BACKUP_DIR -name mc-*.tar.gz -mtime $KEEP_DAYS -delete echo Backup completed: $BACKUP_DIR/mc-$DATE.tar.gz這個(gè)腳本的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單、不會(huì)備份到寫了一半的文件。缺點(diǎn)是備份期間玩家會(huì)掉線。如果把時(shí)間定在凌晨4點(diǎn)對玩家影響很小。6.3 配置定時(shí)任務(wù)把備份腳本放到/opt/mc-server/backup.sh然后執(zhí)行chmod x /opt/mc-server/backup.sh sudo crontab -e添加一行0 4 * * * /opt/mc-server/backup.sh /var/log/mc-backup.log 21這表示每天凌晨4點(diǎn)執(zhí)行備份日志寫入/var/log/mc-backup.log。建議每周查看一次日志確認(rèn)備份是否成功。6.4 異地備份與冷備只保留在服務(wù)器本地的備份還不夠。如果服務(wù)器系統(tǒng)盤損壞備份也會(huì)一起丟失。最簡單的辦法是在備份腳本里增加一步把壓縮包同步到對象存儲或用rsync拷貝到另一臺機(jī)器。例如用rclone同步到對象存儲rclone copy /opt/mc-backups remote:mc-backups或者用rsync同步到局域網(wǎng)NAS。異地備份的頻率可以比本地備份低比如每周同步一次。成本不高但能解決服務(wù)器整體故障時(shí)的數(shù)據(jù)恢復(fù)問題。6.5 恢復(fù)流程恢復(fù)存檔時(shí)先把服務(wù)停掉systemctl stop mc-server然后刪除損壞的world文件夾用備份還原cd /opt/mc-server rm -rf world world_nether world_the_end tar -xzf /opt/mc-backups/mc-YYYYMMDD-HHMMSS.tar.gz解壓后恢復(fù)目錄權(quán)限chown -R mcserver:mcserver /opt/mc-server systemctl start mc-server恢復(fù)完成后要登錄游戲確認(rèn)建筑、箱子、玩家背包都正常。如果玩家發(fā)現(xiàn)回檔到了昨天說明備份邏輯生效如果世界空白說明備份文件損壞或路徑不對需要馬上排查。7. 運(yùn)行驗(yàn)證與效果檢查7.1 驗(yàn)證服務(wù)狀態(tài)執(zhí)行systemctl status mc-server預(yù)期輸出里應(yīng)該有Active: active (running)。如果出現(xiàn)failed用journalctl -u mc-server -n 50查看最近的錯(cuò)誤日志。登錄服務(wù)器控制臺輸入list能看到當(dāng)前在線玩家列表說明服務(wù)器正常響應(yīng)。7.2 驗(yàn)證自動(dòng)重啟在MC服務(wù)端控制臺執(zhí)行stop命令或者直接查看進(jìn)程狀態(tài)systemctl kill -s SIGKILL mc-server這個(gè)命令會(huì)模擬進(jìn)程被異常殺死。幾秒后執(zhí)行systemctl status mc-server如果看到進(jìn)程重新變成active (running)說明Restart機(jī)制生效。這是驗(yàn)證“服務(wù)不刪”最直接的方式。注意生產(chǎn)服務(wù)器不建議隨意測試最好在非玩家在線時(shí)段操作。7.3 驗(yàn)證備份文件每個(gè)月可以挑一次維護(hù)窗口在測試服務(wù)器上解壓一次最新的備份包確認(rèn)文件完整tar -tzf /opt/mc-backups/mc-20250101-040000.tar.gz | head -20然后實(shí)際啟動(dòng)一次測試服務(wù)端把world加載起來看是否能正常進(jìn)入世界。腳本能跑通不等于數(shù)據(jù)可恢復(fù)只有實(shí)際驗(yàn)證過的備份才有意義。這個(gè)測試環(huán)境不需要和線上一樣配置只要Java版本一致即可。8. 常見問題與排查思路問題現(xiàn)象可能原因排查方式解決方案啟動(dòng)后提示“Failed to load eula.txt”eula.txt未修改或修改未保存查看eula.txt內(nèi)容將eulafalse改為eulatrue玩家連接時(shí)顯示“Outdated Client/Server”客戶端與服務(wù)端版本不匹配檢查服務(wù)端版本與玩家客戶端版本統(tǒng)一版本或重新下載對應(yīng)版本服務(wù)端服務(wù)器能啟動(dòng)但外網(wǎng)無法連接云服務(wù)器安全組或防火墻未放行25565端口檢查安全組規(guī)則和防火墻狀態(tài)放行TCP 25565端口內(nèi)存錯(cuò)誤“OutOfMemoryError”JVM堆內(nèi)存設(shè)置過大或過小查看日志中的內(nèi)存數(shù)據(jù)根據(jù)服務(wù)器內(nèi)存調(diào)整-Xms和-Xmx參數(shù)進(jìn)程反復(fù)崩潰插件沖突或世界區(qū)塊損壞查看崩潰報(bào)告檢查latest.log禁用沖突插件或恢復(fù)備份存檔存檔加載失敗world文件夾損壞嘗試用備份恢復(fù)刪除損壞存檔并解壓最近備份定時(shí)備份沒有生成文件crontab未生效或腳本權(quán)限錯(cuò)誤檢查cron日志和腳本執(zhí)行權(quán)限確認(rèn)crontab路徑正確chmod x腳本管理員無法使用命令op權(quán)限未設(shè)置控制臺輸入op命令使用op 玩家名添加管理員權(quán)限排查問題時(shí)最重要的一步是看日志。MC服務(wù)端根目錄下的logs/latest.log記錄了啟動(dòng)和運(yùn)行過程中的所有關(guān)鍵信息。遇到異常先把日志最后50行貼出來大部分問題都能定位。9. 長期運(yùn)營的工程建議9.1 用獨(dú)立用戶運(yùn)行服務(wù)端不要用root賬號運(yùn)行MC服務(wù)器。萬一服務(wù)端被惡意玩家利用漏洞執(zhí)行命令獨(dú)立用戶的權(quán)限范圍可以降低風(fēng)險(xiǎn)。9.2 維護(hù)穩(wěn)定的版本策略設(shè)定一個(gè)“核心版本周期”。比如半年內(nèi)固定在某個(gè)版本上不跟隨MC新版本而頻繁升級。升級前必須備份完整存檔并在測試服務(wù)器上驗(yàn)證所有插件兼容后再切換。永久不刪檔不等于永久不維護(hù)維護(hù)必須建立在可回滾的基礎(chǔ)上。9.3 拒絕下載來路不明的插件插件的核心風(fēng)險(xiǎn)是惡意代碼和兼容性問題。從SpigotMC、PaperMC等官方社區(qū)下載插件不隨意使用第三方整合包中的陌生插件。新增插件之前在測試服運(yùn)行一段時(shí)間。9.4 做好玩家數(shù)據(jù)相關(guān)約定每個(gè)長期服務(wù)器都會(huì)有人工管理需求比如玩家拆家、刷物品、利用BUG。提前設(shè)置好白名單、領(lǐng)地插件或記錄插件可以減少糾紛。運(yùn)營者還要定期查看服務(wù)器聊天記錄和日志。技術(shù)架構(gòu)只是基礎(chǔ)一個(gè)能長期運(yùn)行的服務(wù)器規(guī)則通常比技術(shù)更關(guān)鍵。9.5 保持固定重啟和備份時(shí)間每周固定時(shí)間重啟一次服務(wù)器清理內(nèi)存碎片也讓定期維護(hù)成為習(xí)慣。重啟前5分鐘在服務(wù)器內(nèi)公告提醒玩家退出。自動(dòng)化腳本雖然能完成大部分工作但運(yùn)營者仍需要每周掃一眼備份日志、磁盤空間和服務(wù)狀態(tài)。9.6 寫一份服務(wù)器運(yùn)營文檔把服務(wù)端版本、Java版本、啟動(dòng)參數(shù)、備份方式、恢復(fù)步驟、插件清單、玩家注意事項(xiàng)都寫到一個(gè)文檔里。這個(gè)文檔的存在能避免“服務(wù)器交接三個(gè)月后沒人知道密碼和備份位置”的尷尬局面?;氐介_頭那個(gè)問題能不能開一個(gè)一輩子的MC服務(wù)器從技術(shù)層面看答案是肯定的但它不是一個(gè)文件、一條命令就能實(shí)現(xiàn)的。真正支撐起“一輩子”的是systemd守護(hù)下的自動(dòng)重啟是每天凌晨自動(dòng)執(zhí)行并且經(jīng)過驗(yàn)證的備份任務(wù)是版本升級時(shí)留好的回滾余地是運(yùn)營者愿意每周花十幾分鐘檢查日志和備份的習(xí)慣。這篇文章給出的方案用到的技術(shù)都很基礎(chǔ)沒有復(fù)雜的架構(gòu)也沒有昂貴的成本但它們組合在一起就構(gòu)成了一個(gè)能長期運(yùn)行的MC服務(wù)器基礎(chǔ)設(shè)施。如果你正準(zhǔn)備搭建自己的生存服務(wù)器建議先把systemd服務(wù)和備份腳本配置好再開始喊話招人。服務(wù)器可以慢慢宣傳但存檔的保護(hù)機(jī)制必須從第一天就生效。