Score:0

ฉันจะสร้างสคริปต์ทุบตีที่เริ่มเซสชันหน้าจอซึ่งสามารถแยกออกและดำเนินการต่อได้อย่างไร

ธง eg

ใหม่มากสำหรับสิ่งนี้ (สคริปต์แรกจริงที่ฉันเขียน) แต่ฉันกำลังพยายามทำให้บางสิ่งเป็นอัตโนมัติด้วยเซิร์ฟเวอร์ minecraft ของฉัน ฉันกำลังสร้างสคริปต์ทุบตีที่จะกำหนดเวลาโดย chron to

  1. เปลี่ยน cpu Governor เป็นประสิทธิภาพ
  2. ใช้ java เพื่อเริ่มไฟล์ server.jar

ใช้คำสั่งเทอร์มินัลที่ฉันป้อน หน้าจอ -r java -Xmx6800M -Xms6800M -jar server.jar nogui จากไดเร็กทอรี /home/user/minecraft ที่ฉันเก็บไฟล์ที่เกี่ยวข้องไว้ทั้งหมด ฉันคิดว่าฉันสามารถวางคำสั่งนี้ลงในสคริปต์และจะเริ่มเซสชันหน้าจอที่สามารถแยกออกได้ การใช้ bash เพื่อเรียกใช้สคริปต์ด้วยคำสั่งนี้เริ่มต้นทุกอย่างเหมือนปกติ แต่เมื่อใดก็ตามที่ฉันแยกออกด้วย Ctrl+A Ctrl+D จะมีข้อความว่า "แยกออกจาก" และให้ ID เซสชันสำหรับหน้าจอแยก... แต่จากนั้นใช้ screen -r หรือ -ls คำสั่งแสดงว่าไม่มีหน้าจอที่จะดำเนินการต่อ ฉันรู้ว่ากระบวนการยังคงทำงานอยู่เพราะฉันยังสามารถเข้าร่วมเซิร์ฟเวอร์ของฉันได้

ไม่แน่ใจจริงๆ ว่าเกิดอะไรขึ้นที่นี่ แต่ถ้ามีวิธีเขียนสคริปต์ที่จะเรียกใช้ไฟล์ server.jar ของฉันในเซสชันที่สามารถแยกออกและกลับมาทำงานต่อได้ ฉันขอขอบคุณคำแนะนำ

bmellot2 avatar
eg flag
เพื่อเป็นการอัปเดต แม้ว่าฉันจะไม่พบเซสชันหน้าจอใดๆ ที่จะเชื่อมต่ออีกครั้ง แต่การใช้คำสั่ง pkill screen จะสิ้นสุดกระบวนการจาวาที่เริ่มต้นโดยสคริปต์ของฉัน ดังนั้นจึงสันนิษฐานได้ว่า *มี* เซสชันหน้าจออยู่ที่ใดที่หนึ่ง ฉันไม่สามารถหาวิธีค้นหาและเชื่อมต่อกับมันอีกครั้งหลังจากแยกออก
user10489 avatar
in flag
นี่ไม่ใช่คำถามเกี่ยวกับสคริปต์ทุบตี แต่เกี่ยวกับวิธีใช้หน้าจอ คุณไม่ได้ใส่ข้อมูลเพียงพอที่จะระบุปัญหาของคุณ คุณสามารถใช้ ps เพื่อตรวจสอบว่างานจาวาของคุณยังทำงานอยู่หรือไม่ อาจเป็นไปได้ว่าคุณกำลังเริ่มต้นหน้าจอและพยายามดำเนินการต่อจากผู้ใช้รายอื่น หรือมีบางอย่างกำลังลบจุดสิ้นสุดซ็อกเก็ตของหน้าจอ
user535733 avatar
cn flag
ดังนั้น คำสั่ง start ของคุณจึงใช้งานได้ และคุณสามารถแนบอีกครั้งกับเซสชันที่กำลังทำงานอยู่ และคุณก็ได้ค้นพบ manpage ที่มีรายละเอียดวิธีการแสดงรายการเซสชัน คำถามที่คุณต้องการคำตอบคืออะไร? คำแนะนำ: ใช้ systemd เพื่อเริ่ม/หยุดเซิร์ฟเวอร์แทนสคริปต์ มันง่ายกว่ามาก
user10489 avatar
in flag
คุณไม่จำเป็นต้องฆ่างานเพื่อหามัน ลอง ps หรือ pgrep -f ใน Ubuntu ไดเร็กทอรีซ็อกเก็ตหน้าจอควรอยู่ใน /run/screen/ และคุณควรมองหาซ็อกเก็ตหน้าจอที่นั่น
user10489 avatar
in flag
สันนิษฐานว่าคุณกำลังเริ่มต้นด้วยหน้าจอเพื่อให้คุณสามารถโต้ตอบได้ในภายหลัง มิฉะนั้น ฉันเห็นด้วยกับ @ user535733 ว่าคุณไม่ควรใช้หน้าจอสำหรับสิ่งนี้ แต่เป็นสคริปต์ systemd
user535733 avatar
cn flag
หน้าจอยังจำเป็นสำหรับเซิร์ฟเวอร์ Java -- ฉันไม่สามารถทำให้เซิร์ฟเวอร์ minecraft ทำงานได้สำเร็จหากไม่มีมัน ฉันพบว่าไม่จำเป็นต้องโต้ตอบกับเซิร์ฟเวอร์ที่กำลังทำงานอยู่: อินพุตทั้งหมดสามารถทำได้โดยผู้ดูแลระบบบนไคลเอ็นต์ และเอาต์พุตทั้งหมดจะถูกบันทึก สิ่งที่ systemd ทำคือทำให้การเริ่มต้น การหยุด และการตรวจสอบสถานะเซิร์ฟเวอร์เป็นเรื่องง่ายสุด ๆ เขียนสคริปต์ได้ง่าย และเหมือนกันกับบริการอื่น ๆงานหลักของ Systemd คือการดูแลบริการ ดังนั้นอาจใช้เครื่องมือที่ถูกต้องสำหรับงานด้วย
user535733 avatar
cn flag
คำสั่งเริ่มต้นของฉันเอง (ในไฟล์ systemd `minecraft.service`) คือ `ExecStart=screen -s mc -d -m java -server -Xms512M -Xmx1024M -jar server.jar nogui`
bmellot2 avatar
eg flag
ใช่ ฉันรู้ได้อย่างรวดเร็วว่าฉันอาจจะทำผิดพลาดทั้งหมด - ตอนแรกคิดว่า crontab เป็นวิธีเดียวในการกำหนดเวลางานเมื่อบูต เพิ่งกลับมาหลังจากลองใช้คำสั่งการบำรุงรักษาพื้นฐานสองคำสั่งในการรีบูตใน crontab - cpupower ทำงานได้ดี แต่ฉันยังไม่สามารถเริ่มเซิร์ฟเวอร์ได้อย่างถูกต้อง ... คำสั่งที่ฉันได้รับคือ ```@reboot screen -S minecraft java -Xmx6800M -Xms6800M -jar /home/filepath/server.jar nogui``` สมมติว่ามันล้มเหลวอาจเป็นเพราะไดเร็กทอรีทำงานแตกต่างจากรูท ดูการใช้ systemd ตอนนี้ - อาร์กิวเมนต์ ```-server``` หลังจาก java คืออะไร นั่นเป็นเรื่องใหม่สำหรับฉัน
bmellot2 avatar
eg flag
"ดังนั้น คำสั่ง start ของคุณจึงใช้งานได้ และคุณสามารถแนบอีกครั้งกับเซสชันที่กำลังทำงานอยู่ และคุณได้ค้นพบ manpage ที่ให้รายละเอียดวิธีการแสดงรายการเซสชัน คำถามที่คุณต้องการคำตอบคืออะไร" คำสั่ง start ใช้งานได้ แต่ฉันไม่สามารถแนบอีกครั้งกับเซสชันหน้าจอที่กำลังทำงานอยู่ได้เมื่อฉันออกจากมัน - มันแปลกมากเพราะมันให้หมายเลข ID เซสชันแก่ฉันด้วยซ้ำ แต่ไม่มีอะไรปรากฏขึ้นโดยใช้ screen -r/-ls หรือแม้แต่ ps/pgrep - ฉ
in flag
Tmux เป็นอัตโนมัติง่ายกว่าหน้าจอมาก

โพสต์คำตอบ

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