สคริปต์ init.d ไม่ทำงานเมื่อเริ่มต้น


15

ฉันกำลังโฮสต์เซิร์ฟเวอร์เกม Counter-Strike บนเซิร์ฟเวอร์เฉพาะของฉันโดยใช้หน้าจอ ฉันมีสคริปต์นี้ที่ฉันเรียกใช้เมื่อฉันต้องการเริ่ม / หยุดเซิร์ฟเวอร์:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

ฉันใส่สคริปต์นี้ (เรียกว่าcss-servers) ใน/etc/init.d/และเพื่อความรู้ของฉันซึ่งหมายความว่ามันจะทำงานเมื่อระบบบูทขึ้น อย่างไรก็ตามเมื่อฉันตรวจสอบหน้าจอที่ใช้งานscreen -lsอยู่จะไม่มีการทำงานใด ๆ

ฉันจะทำให้การทำงานเหล่านี้เมื่อเริ่มต้นภายใต้เซิร์ฟเวอร์ Ubuntu ได้อย่างไร

คำตอบ:


33

เพียงแค่มีสคริปต์อยู่ใน/etc/init.dนั้นไม่เพียงพอที่จะให้มันทำงานเมื่อเริ่มต้น

ในการเพิ่มลงในการเริ่มต้นคุณต้องบอก Ubuntu เกี่ยวกับเรื่องนี้:

sudo update-rc.d css-servers defaults

จากนั้นควรเริ่มต้นในการบูตครั้งถัดไปหากสคริปต์ได้รับการจัดรูปแบบอย่างถูกต้องตั้งค่าบิตที่สามารถใช้งานได้ ฯลฯ แพคเกจที่คุณติดตั้งจากapt-get/ Software Center ให้รันคำสั่งนี้หรือเทียบเท่ากับมันโดยอัตโนมัติ เกี่ยวกับมัน.

หากคุณต้องการเริ่มต้นทันทีคุณสามารถโทรหาได้โดยตรง:

sudo service css-servers start

มันแปลกมาก จนถึงจุดนี้สคริปต์ของฉันทำงานเมื่อเริ่มต้นโดยไม่มีupdate-rc.dคำสั่งนี้ ฉันอัปเดตสคริปต์แล้วมันจะไม่ทำงานอีกต่อไปจนกว่าฉันจะเรียกใช้คำสั่งนี้ ขอบคุณ อย่างไรก็ตามเราจะ "ยกเลิกการลงทะเบียน" จากการทำงานเมื่อเริ่มต้น (เช่นเดียวกับที่เราทำกับ update-rc.d) ได้อย่างไร
Nikos

1
@ Nik-Lz คำถามและคำตอบนี้อ้างอิงถึง Ubuntu รุ่นเก่าและล้าสมัยซึ่งใช้การพุ่งพรวด ไม่ควรใช้อีกต่อไป แต่ควรใช้ systemd ปัจจุบัน (ซึ่งใช้ระบบบริการที่แตกต่างไปจากเดิมอย่างสิ้นเชิง)
Michael Hampton

7

คุณทำส่วนแรกเสร็จแล้ว /etc/init.dเป็นที่ที่สคริปต์การเริ่มต้นทำงานจาก อย่างไรก็ตามมันจะไม่ทำงานโดยอัตโนมัติ

พวกเขาจะทำงานตามลำดับที่ระบุโดยลิงก์สัญลักษณ์/etc/rc*.dไดเรกทอรี แต่ละระดับการรันมีไดเรกทอรีของตัวเอง สคริปต์ที่มีชื่อลิงก์เริ่มต้นด้วยKจะถูกเรียกใช้ด้วยตัวหยุดการหยุดชั่วคราวและสคริปต์ที่มีชื่อขึ้นต้นด้วยSจะถูกเรียกใช้ด้วยพารามิเตอร์เริ่มต้น โดยการประชุมชื่อไฟล์เริ่มต้นด้วยKหรือตามด้วยตัวเลขสองหลักที่ใช้ในการจัดลำดับและลงท้ายด้วยชื่อของสคริปต์ใน S/etc/init.d

ลิงก์สามารถสร้างได้ด้วยตนเอง แต่โดยทั่วไปจะสร้างด้วยสคริปต์ สคริปต์ทั่วไปupdate-rc.dมีอยู่ใน Ubuntu คำสั่งman update-rc.dจะให้เอกสารแก่คุณเกี่ยวกับการใช้งาน ในกรณีของคุณลอง:

sudo update-rc.d css-servers defaults

ในการเริ่มต้นโดยใช้สคริปต์ init ลอง:

sudo /etc/init.d/css-servers start

ฉันมักจะเริ่มและหยุดเซิร์ฟเวอร์ด้วยวิธีนี้เพื่อให้แน่ใจว่าสคริปต์ทำงานได้ตามที่ต้องการ จากนั้นฉันเรียกใช้update-rc.dเพื่อเพิ่มลงใน/etc/rc.dไดเรกทอรี runlevel


1

หากคุณไม่ได้รับเบาะแสใด ๆ เหตุใดบริการของคุณจึงไม่เริ่มต้นในการบู๊ต service <your service> startแต่ก็ทำงานอย่างถูกต้องเมื่อคุณพยายามที่จะเริ่มให้บริการด้วยตนเอง ในกรณีดังกล่าวให้ลองเปลี่ยนเส้นทางเอาต์พุตมาตรฐานและเอาต์พุตข้อผิดพลาดไปยังไฟล์บางไฟล์ ซึ่งอาจทำให้คุณรู้ว่าทำไมมันไม่เริ่มต้นในขณะที่บูตระบบ

เช่นในสคริปต์ของคุณ

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

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