ฉันจะใช้ crontab เพื่อเริ่มเซสชันของหน้าจอได้อย่างไร


12

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

0 0 0 0 0 (คำสั่ง)

ควรทำงานเมื่อเริ่มต้น

มันรันไฟล์เชลล์อยู่ที่ ~ / cube / server.sh


คุณเป็นผู้ใช้ในเครื่องนี้หรือคุณมีสิทธิ์เข้าถึงสคริปต์เริ่มต้นหรือไม่
คอเรย์เอส


@Dennis: ใช่ฉันชอบที่ แต่เราไม่สามารถสรุปได้ว่าเซิร์ฟเวอร์เกมที่เขาใช้ไม่มีคอนโซลบางประเภทที่เขาต้องการเข้าถึง (เช่นทำงานในเบื้องหน้าเสมอ) ถ้าอย่างนั้นทำไมเขาถึงรำคาญกับหน้าจอล่ะ? นอกจากว่าเขาจะไม่ทราบว่าไม่มีข้อมูลใด ๆ
คอเรย์เอส

ฉันเป็นผู้ใช้งานเครื่องนี้
Victor

คำตอบ:


15

สิ่งนี้จะทำงานได้ดี ตัวอย่างนี้วางไข่หน้าจอและเรียกใช้ "top":

screen -d -m top

ใน crontab ของคุณตามที่ระบุไว้คุณต้องการทำสิ่งนี้:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

แน่นอนถ้าเซิร์ฟเวอร์เกมต้องการชุดสภาพแวดล้อม "ปกติ" คุณสามารถเข้าใกล้:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)

1
สิ่งที่ไม่. ~/.profileเป็นส่วนหนึ่งทำอย่างไร
Victor

มันบังคับให้ตั้งค่าสภาพแวดล้อมสำหรับรายการ cron หากไม่มีคุณก็จะได้รับผลงานที่เฉพาะเจาะจงสองสามรายการ (ดูรายละเอียดจาก man crontab)
Corey S.

ฉันมีไฟล์. sh ที่เรียกใช้เซิร์ฟเวอร์เกมดังนั้นจะใช้งานได้หรือไม่ @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Victor

นั่นอาจเป็นวิธีที่ดีที่สุดที่จะทำ หากใช้งานได้คุณอาจไม่ต้องกังวลเกี่ยวกับโปรไฟล์ แต่ถ้าคุณต้องการ $ PATH แบบเต็ม ฯลฯ คุณสามารถระบุแหล่งที่มาใน. profile จากสคริปต์ server.sh
Corey S.

5

นี่น่าจะเพียงพอแล้ว ...

$ crontab -e

จากนั้นป้อน:

@reboot screen -dmS Victor

คุณช่วยลองและอธิบายว่าคำสั่ง 'Victor' นี้เกี่ยวข้องกับการเรียกใช้สคริปต์ได้อย่างไร - เช่นสคริปต์ที่ OP ถาม
Patrick

1
-S ใช้สำหรับชื่อเซสชัน
atx

4

เพียงเพื่อความสมบูรณ์เท่านั้นก็เป็นไปได้ที่จะใช้tmuxเพื่อวัตถุประสงค์แทนscreen(ดูลิงค์นี้เพื่อการเปรียบเทียบ):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"

0

ฉันมีสถานการณ์ที่คล้ายกัน แต่เนื่องจากข้อ จำกัด อื่น ๆ ที่ไม่สมเหตุสมผลฉันไม่สามารถใช้ crontab ได้ จริง ๆ แล้วฉันมีหน้าจอการโทร Inittab (แทนที่ชื่อบางส่วนเพื่อปิดบังข้อมูล):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

ใน 'file.screenrc' เป็นที่ที่ฉันตั้งค่าตัวเลือกไม่กี่:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

วิธีนี้มันเริ่มต้นในการบูตและหากโปรแกรมเสียชีวิตหรือปิดหน้าจอมันจะเกิดใหม่ มันอาจไม่ได้รับการพิจารณาแบบดั้งเดิม แต่ฉันต้องทำงานกับข้อกำหนดสภาพแวดล้อมแปลก ๆ หากเราจำเป็นต้องถอดมันออกไปเราจะต้องแสดงความคิดเห็นในบรรทัดนั้นและฆ่าเซสชัน จากนั้นเมื่อพร้อมที่จะนำมันกลับมาไม่แสดงความคิดเห็นและริเริ่ม q

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.