Score:2

ฉันจะสร้างบริการเริ่มต้นสำหรับเซิร์ฟเวอร์ Minecraft ที่มีไฟล์ start.sh ได้อย่างไร

ธง eg

ฉันติดตั้งเซิร์ฟเวอร์ FTB ที่ดัดแปลงแล้วลงในเซิร์ฟเวอร์ Ubuntu ของฉัน สร้างผู้ใช้และกลุ่มชื่อ "ftb" และให้ไดเร็กทอรีของตัวเอง /เลือก/ftb/ ที่มีโฟลเดอร์ที่มีไฟล์เซิร์ฟเวอร์ ในโฟลเดอร์เซิร์ฟเวอร์ มีไฟล์ start.sh เพื่อเริ่มเซิร์ฟเวอร์ ฉันจะสร้างไฟล์บริการระบบได้อย่างไร เพื่อให้ฉันสามารถใช้คำสั่งต่างๆ เช่น สถานะ systemctl ftbacademy.service, systemctl เริ่ม ftbacademy.service, และ systemctl หยุด ftbacademy.service. เมื่อหยุดเซิร์ฟเวอร์ ฉันต้องการให้บันทึกและปิดเซิร์ฟเวอร์ ไฟล์ .service จะเป็นอย่างไร ฉันรู้ว่ามันจะต้องอยู่ใน /etc/systemd/ระบบ/แต่ฉันไม่รู้วิธีเขียนไฟล์ที่จะทำให้ผู้ใช้ ftb เปิดเป็นเทอร์มินัลเสมือนของตัวเองหรืออะไรก็ตามที่สามารถช่วยโลกและหยุดเซิร์ฟเวอร์ได้

เซิร์ฟเวอร์ Ubuntu เวอร์ชัน 20.04.3

เว็บไซต์ดาวน์โหลดไฟล์เซิร์ฟเวอร์ FTB Academy 1.16 ที่ใช้: https://feed-the-beast.com/modpacks/88/server/2077 ฉันเลือกตัวเลือกดาวน์โหลด Linux จากนั้นเรียกใช้ไฟล์ติดตั้งเพื่อดาวน์โหลดไฟล์เซิร์ฟเวอร์โดยอัตโนมัติ

ฉันยังใช้ JDK เวอร์ชันอื่นเพื่อเรียกใช้ไฟล์เซิร์ฟเวอร์ ดังนั้นฉันจึงเปลี่ยนไฟล์ start.sh เป็น:

#!/bin/bash
ถ้า ! grep -q "eula=true" eula.txt; แล้ว
    echo "คุณยอมรับ Mojang EULA ที่ https://account.mojang.com/documents/minecraft_eula หรือไม่"
    อ่าน -N 1 -p "[y/n] " EULA
    ถ้า [ "$EULA" = "y" ]; แล้ว
        echo "eula=true"> eula.txt
        เสียงสะท้อน
    ไฟ
ไฟ
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16 5-36.2.2.jar โนกุย
Nate T avatar
it flag
เซิร์ฟเวอร์ ftb ที่ดัดแปลงตัวใด มันมาจากเว็บไซต์อย่างเป็นทางการของ feedthebeast หรือที่อื่น รายการปลายทางและฉันจะติดตั้งในเครื่องและแจ้งให้คุณทราบ ต้องดูไฟล์ sh ก่อนที่ฉันจะบอกวิธีเพิ่ม มันอาจจะเรียกใน `.bashrc` แต่ฉันต้องดูว่ามันทำอะไรก่อนที่จะให้คำแนะนำในการติดตั้ง นอกจากนี้ ฉันต้องการสำเนาของเซิร์ฟเวอร์ XD Btw คุณต้องเพิ่มเวอร์ชัน Ubuntu ของคุณในคำถาม เวอร์ชันต่างๆ มีสภาพแวดล้อมที่แตกต่างกัน คำตอบส่วนใหญ่จะแตกต่างกันเล็กน้อยขึ้นอยู่กับเวอร์ชัน โดยเฉพาะอย่างยิ่งเนื่องจากเราเพิ่งเปลี่ยนค่าเริ่มต้น win mgr ใน 21.04
lordoftimelords avatar
eg flag
@NateT ฉันเชื่อว่าฉันได้เพิ่มข้อมูลทั้งหมดที่คุณร้องขอแล้ว ฉันใช้เว็บไซต์อย่างเป็นทางการของ FTB และได้เพิ่มลิงก์ในโพสต์
lordoftimelords avatar
eg flag
@NateT `ซีดี /usr/lib/jvm/java-11-openjdk-amd64/bin && ls -a | grep java` ส่งออก `java ชวา จาวัค จาวาด็อก ชวาป`.สิ่งนี้จะช่วยในการสร้างไฟล์ .service ได้อย่างไร ฉันไม่มีปัญหาในการใช้งานเซิร์ฟเวอร์ ฉันแค่ต้องการสร้างไฟล์ .service เพื่อเรียกใช้เมื่อเริ่มต้น หยุดเซิร์ฟเวอร์ และตรวจสอบสถานะโดยใช้ผู้ใช้ ftb ขอโทษถ้าฉันเข้าใจผิดว่าเกิดอะไรขึ้น ฉันไม่ค่อยคุ้นเคยกับเรื่องนี้ ฉันทำตามคำแนะนำที่เฉพาะเจาะจงและคัดลอกและวางเนื้อหาเป็นส่วนใหญ่
Terrance avatar
id flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [ฉันจะเรียกใช้คำสั่งเดียวเมื่อเริ่มต้นโดยใช้ systemd ได้อย่างไร](https://askubuntu.com/questions/919054/how-do-i-run-a-single-command-at-startup-using-systemd)
Nate T avatar
it flag
นอกจากนี้ ฉันเห็นคำว่า `log4j ซึ่งทำให้ฉันกลัวเล็กน้อย ตามด้วย 'แก้ไข' แต่ฉันจะไม่เดิมพันฟาร์มของฉันกับมัน หากคุณวางแผนที่จะวางไว้ในเซิร์ฟเวอร์ Docker หรือ apache2 ที่มีพอร์ต fwded ฉันจะไม่ทำเช่นนั้น ดู[ที่นี่](https://www.youtube.com/watch?v=qjA_vc9Ua5A&t=203s) มันเป็นวิดีโอของเซิร์ฟเวอร์ Minecraft บน Ubuntu ที่ถูกอัดฉีดด้วยเพย์โหลดที่มี cmds เพื่อให้ทำงานบนระบบของเหยื่อ ฉันขอแนะนำให้ตรวจสอบข่าวและพยายามประเมินความเชื่อมั่นของชุมชนโอเพ่นซอร์สในแพตช์ เห็นได้ชัดว่ามีช่องโหว่เพิ่มขึ้นตั้งแต่ฉันตรวจสอบครั้งล่าสุด
Nate T avatar
it flag
ตกลง หากคุณไม่ได้วางแผนที่จะส่งต่อไปยังอินเทอร์เน็ต ให้เรียกใช้ cmd นี้ใน bash shell `MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc`
lordoftimelords avatar
eg flag
@NateT จะทำอย่างไรถ้าฉันวางแผนที่จะพอร์ตไปข้างหน้า ฉันวางแผนที่จะใช้เซิร์ฟเวอร์นอกบ้านกับเพื่อน ฉันใช้การบังคับใช้รายการที่อนุญาตพิเศษและได้ส่งต่อพอร์ตที่จำเป็นเท่านั้น ผู้ใช้ ftb ยังไม่มีสิทธิ์ sudo นอกจากนี้ ฉันจะหยุดเซิร์ฟเวอร์ได้อย่างไรหากต้องทำ ฉันไม่ค่อยเข้าใจว่าคำสั่งด้านบนทำอะไร ฉันคิดว่าฉันเข้าใจว่ามันเพิ่มนามแฝงเพื่อย่อคำสั่งให้สั้นลงเป็น start_srvr แต่ `&& echo "${MC_CMD}" >> ~/.bash_aliases || คืออะไร echo "${MC_CMD}" >> ~/.bashrc` ทำอย่างไร
Nate T avatar
it flag
` sudo chmod 774 ` จะให้สิทธิ์ที่จำเป็น แต่เรียกใช้ `ls -l ` และจดสตริงการอนุญาตเดิมไว้ก่อน ในกรณีที่คุณจำเป็นต้องเปลี่ยนกลับทำไมคุณถึงใช้ systemd เพื่อเรียกใช้สคริปต์เริ่มต้น คุณต้องการที่จะทำงานเป็นภูต? นั่นคงไม่สมเหตุสมผลนัก เว้นแต่คุณจะใช้เป็นเว็บเซิร์ฟเวอร์เฉพาะ ซึ่งในกรณีนี้ก็ไม่เป็นไร...
Nate T avatar
it flag
ฉันจะรอสองสามสัปดาห์... **ดูวิดีโอ** ^^^. มันมีช่องโหว่ขนาดใหญ่อยู่ในนั้น ใหญ่พอที่จะเป็นตะปูตัวสุดท้ายในโลงศพของ Java ได้ และนั่นมาจากนักพัฒนา Java มืออาชีพ ผมว่าไม่เบานะ
lordoftimelords avatar
eg flag
@NateT ฉันได้เพิ่มความคิดเห็นในคำตอบของคุณด้านล่างพร้อมลิงก์ไปยังคำแนะนำที่ฉันติดตามสำหรับเซิร์ฟเวอร์วานิลลา ฉันไม่รู้ข้อดีและข้อเสียของ systemd และฉันไม่รู้ว่า daemon คืออะไร ฉันชอบฟังก์ชันที่สามารถเริ่มต้นเซิร์ฟเวอร์ ตรวจสอบสถานะ และหยุดเซิร์ฟเวอร์ด้วยคำสั่ง และไม่จำเป็นต้องเก็บหน้าต่างที่ใช้งานอยู่ในเซิร์ฟเวอร์เพื่อทำสิ่งเหล่านั้น นอกจากนี้ ฉันขอลิงก์ไปยังวิดีโอนั้นได้ไหม และนั่นหมายความว่าฉันควรปิดเซิร์ฟเวอร์อื่นๆ ของฉันหรือไม่ ฉันใช้เดือยสำหรับพวกเขาและใช้ TCPShield เพื่อป้องกัน ddos ​​และสิ่งอื่น ๆ ถ้าฉันจำไม่ผิด
Nate T avatar
it flag
ให้เรา [สนทนาต่อในแชท](https://chat.stackexchange.com/rooms/132813/discussion-between-nate-t-and-lordoftimelords)
Terrance avatar
id flag
จากนั้นคุณอาจต้องการดูhttps://askubuntu.com/questions/676007/how-do-i-make-my-systemd-service-run-via-specific-user-and-start-on-bootด้วยในการเพิ่ม `User=` และ `Group=` สำหรับการเรียกใช้ในฐานะผู้ใช้รายอื่นใน systemd
Score:2
ธง eg

ฉันสร้างไฟล์ชื่อ [email protected] ที่สถานที่ /etc/systemd/ระบบ/. ไฟล์ประกอบด้วยสิ่งต่อไปนี้:

[หน่วย]
คำอธิบาย=เซิร์ฟเวอร์ FTB: %i
หลังจาก = network.target

[บริการ]
WorkingDirectory=/opt/ftb/%i

ผู้ใช้ = ftb
กลุ่ม=ftb

เริ่มใหม่ = เสมอ

ExecStart=/usr/bin/screen -DmS mc-%i ทุบตี start.sh

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "บอกว่าเซิร์ฟเวอร์ปิดลงใน 15 วินาที..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'สิ่ง "พูดว่าเซิร์ฟเวอร์ปิดลงใน 10 วินาที..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "พูดว่าเซิร์ฟเวอร์ปิดลงใน 5 วินาที..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'สิ่ง "บันทึกทั้งหมด"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'สิ่ง "หยุด"\015'

[ติดตั้ง]
WantedBy=multi-user.target

จากนั้นฉันก็ใช้ systemctl เปิดใช้งาน ftb@academy และ systemctl เริ่ม ftb@academy เพื่อเปิดใช้งานและเริ่มต้นเซิร์ฟเวอร์ ฉันยังตระหนักด้วยว่าเมื่อฉันสร้างผู้ใช้ ftb ขึ้นมาและให้สิทธิ์ความเป็นเจ้าของโฟลเดอร์นั้นโดยที่ฉันไม่ได้รับอนุญาตจากโฟลเดอร์ย่อย ดังนั้นจึงถูกปฏิเสธไม่ให้เริ่มเซิร์ฟเวอร์

Score:0
ธง it

สังเกต URL สำหรับ EULA ในสคริปต์ ทั้งหมดนี้เป็นเพียงการขอให้คุณได้อ่านและหากคุณยอมรับเงื่อนไขของมัน แต่เฉพาะในกรณีที่คุณยังไม่ได้ถูกถามและตอบว่าใช่

ดังนั้นหลังจากรันครั้งแรก มันจะรันเฉพาะบรรทัดบนและล่างเท่านั้น

วิธีที่ง่ายที่สุดในการตั้งค่า (ซึ่งจะช่วยประหยัดเวลาในระยะยาว) คือการเพิ่มนามแฝงสำหรับคำสั่งในบรรทัดสุดท้าย ซึ่งจะกำหนดค่าและเริ่มต้นไฟล์เซิร์ฟเวอร์ สามารถทำได้ด้วย:

MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M - Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc

การเรียกใช้คำสั่งที่ฉันเพิ่มไว้ด้านบนเป็นเพียงการอำนวยความสะดวกเล็กน้อย คุณจึงไม่ต้องกังวลเกี่ยวกับการเพิ่มสคริปต์ เส้นทาง หรือต้องคำนวณพาธสัมพัทธ์หรือพิมพ์พาธแบบเต็มทุกครั้งที่คุณต้องการเริ่มเซิร์ฟเวอร์

หากคุณตัดสินใจลบเซิร์ฟเวอร์ คุณสามารถลบ "คำสั่ง" ได้โดยแก้ไข ~/.bash_aliases และลบบรรทัดเดียวที่มีอยู่

lordoftimelords avatar
eg flag
ฉันจะหยุดเซิร์ฟเวอร์ด้วยวิธีนี้ได้อย่างไร ฉันอาจไม่เข้าใจสิ่งที่เกิดขึ้นทั้งหมด แต่ฉันเชื่อว่านี่เพิ่งเริ่มเซิร์ฟเวอร์เมื่อบู๊ต แต่ไม่มีอะไรถูกต้องจริงๆ สำหรับเซิร์ฟเวอร์อื่นๆ ของฉัน ฉันทำตามคำแนะนำนี้ https://linuxconfig.org/ubuntu-20-04-minecraft-server-setup และชอบความสามารถในการหยุดเซิร์ฟเวอร์และให้มันออกอากาศข้อความเซิร์ฟเวอร์โดยอัตโนมัติว่าเซิร์ฟเวอร์กำลังปิดตัวลง . ฉันรู้ว่ามันจู้จี้จุกจิก แต่ฉันอยากได้อะไรแบบนั้นมากกว่า เป็นไปได้ไหม? ฉันไม่มีความรู้ในการสร้างสิ่งนี้ใหม่สำหรับเซิร์ฟเวอร์ ftb ฉันพยายามและรู้สึกสับสน
Nate T avatar
it flag
มันบอกว่าให้ทำเช่นนั้นใน readme ได้อย่างไร? ฉันสามารถเขียนฟังก์ชันเพื่อบันทึกได้ อันที่จริง ด้วย log4j ฉันสามารถฆ่ามันได้จากที่นี่! XD ไม่ แต่อย่างจริงจัง ไฟล์ที่กล่าวถึงในส่วนท้ายสุดของนามแฝงคือจุดเริ่มต้น ควรมีคำสั่งผู้ดูแลระบบ "ในเกม" ในตัวเพื่อทำทั้งสองอย่าง (บันทึกและหยุดเซิร์ฟเวอร์)
lordoftimelords avatar
eg flag
โดยทั่วไป หากคุณรันคำสั่ง start.sh ในฐานะผู้ใช้ในเทอร์มินัลในขณะที่ sshed คำสั่งนั้นจะรันเซิร์ฟเวอร์ในเทอร์มินัลจากนั้นคุณสามารถพิมพ์คำสั่งลงในเซิร์ฟเวอร์ (เกือบจะเหมือน / คำสั่งในเกมหากคุณมีสิทธิ์ระดับเจ้าของหรือผู้ดูแลระบบ) เช่น หยุด มันจึงแสดงการโหลดของเซิร์ฟเวอร์ คุณสามารถพิมพ์ stop เพื่อบันทึกและหยุด ใช้คำสั่งเช่น whitelist, blacklist, ipban ฯลฯ ฉันไม่ต้องการคำสั่งอื่นเนื่องจากฉันสามารถแก้ไขไฟล์ที่มีผู้ใช้ที่อนุญาตพิเศษ แต่หยุด คงจะดีฉันจะได้ไม่ต้องเข้า Minecraft เข้าร่วมเซิร์ฟเวอร์แล้วสั่งหยุด ใช้เวลาในการโหลด
Nate T avatar
it flag
เข้าใจแล้ว. ป่วยเขียนอะไรบางอย่าง ขอเวลาสักครู่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา