Debian: วิธีรันสคริปต์เมื่อเริ่มต้นโดยไม่ต้องเขียนเชลล์สคริปต์ 30 บรรทัด?


20

ฉันมีเซิร์ฟเวอร์ Debian และฉันต้องเรียกใช้สคริปต์เมื่อเริ่มต้น

ฉันอ่านแล้ว: https://www.debian-administrator.org/article/28/Making_scripts_run_at_boot_time_with_Debian

ฉันได้รับแล้ว: insserv: warning: สคริปต์ 'ไม่มีแท็ก LSB และการแทนที่ที่ขาดหายไป

ดังนั้นดูเหมือนว่าฉันต้องเพิ่มตอนนี้:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

ตอนนี้ดูเหมือนบ้าไปแล้ว: เหมือนสคริปต์ 30 บรรทัดเพียงเพื่อเรียกใช้โปรแกรมเมื่อเริ่มต้น

มีเครื่องมือที่ช่วยให้ทำอย่างนั้นได้อย่างง่ายดาย?

ความนับถือ


มันเป็นสคริปต์ประเภทไหน? คุณพยายามเรียกใช้จาก /etc/rc.local หรือไม่ คุณสามารถใส่พา ธ ไปยังสคริปต์ในไฟล์ rc.local และจะดำเนินการในเวลาบูต
Diamant

สคริปต์ง่ายที่จะเริ่มต้นกระบวนการโหนดเริ่ม PHP ฯลฯ ...
yarek

ฉันนับ 9 บรรทัดไม่ใช่ 30 และพวกเขาแสดงความคิดเห็นไม่ใช่เชลล์สคริปต์ (และไม่ใช่สคริปต์ SSH)
wurtel

พวกเขาเป็นส่วนหัวของ LSB (ดูwiki.debian.org/LSBInitScripts ) และตัวสร้างสคริปต์สำเร็จรูปของ LSB นั้นอยู่ทางเหนือของ 70 บรรทัด (ดูสิ่งต่าง ๆ เช่นgithub.com/fhd/init-script-template/blob/master/template ) หากคุณต้องการให้คำสั่งเดียวดำเนินการด้วยมือเพื่อจัดการให้คุณเมื่อบูตโดยคอมพิวเตอร์ผ่านไฟล์บางไฟล์ใน / etc ดูเหมือนว่าจะเป็นพิธีที่ซับซ้อน!
kristopolous

คำตอบ:


29

หากสคริปต์ของคุณคือ "เพียงสคริปต์" และไม่เริ่ม daemon ให้ลองใช้/etc/rc.local(ดำเนินการในฐานะรูท) หรือcrontab(ดำเนินการในฐานะผู้ใช้ที่คุณเลือก)

สองตัวอย่าง:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(แก้ไขผ่านเช่นcrontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

แก้ไข 1:เพียงแค่อ่านความคิดเห็นของคุณ: หากสคริปต์ของคุณเริ่มต้น daemons ซึ่งควรทำงานตลอดเวลาฉันจะแนะนำให้ใช้rc.localหรือหรือcrontabและแทนที่จะเขียนinit.dสคริปต์ที่เหมาะสม (หรือหลาย) วิธีนี้ทำให้คุณ / ระบบของคุณสามารถรีสตาร์ท / รีโหลด / เริ่ม / หยุด ฯลฯ ได้อย่างหมดจด

แก้ไข 2:คุณเรียกมันว่าบ้า แต่LSB tagsให้ค่าบางอย่าง: "โดยการจัดทำเอกสารการพึ่งพาเวลาทำงานสำหรับสคริปต์ init.d มันเป็นไปได้ที่จะตรวจสอบลำดับการบู๊ตปัจจุบันสั่งการบูตโดยใช้การพึ่งพาเหล่านี้และรันสคริปต์บูตใน ขนานเพื่อเร่งความเร็วกระบวนการบูต " สำหรับรายละเอียดเพิ่มเติมตรงไปที่วิกิพีเดีย Debian

(โดยวิธี: มันเป็นการเตือนจริง ๆ แล้วมันขึ้นอยู่กับคุณอย่างไรและจะทำอย่างไรกับสิ่งนี้)


ฉันชอบเวอร์ชั่น crontab .. แต่ฉันไม่คิดว่า @reboot ทำงานบนเดเบียนได้!
yarek

@yarek: ใช้งานได้ด้วยตัวเอง (สำหรับสคริปต์ซึ่งเป็นเพียงสคริปต์)
gf_

2
มันใช้งานได้ แต่ฉันคิดว่ามันมีไว้สำหรับผู้ใช้รูทเท่านั้นดังนั้นคุณต้องทำ@reboot root /usr/local/bin/your-script.sh
Froggiz

btw ฉันกำลังพูดถึงเดเบียน!
Froggiz

ฉันยังค่อนข้างสับสนจริง ๆ : cron เปิดใช้งานเพื่อเรียกใช้ anyscript เมื่อเซิร์ฟเวอร์รีสตาร์ทหรือไม่เปิดเซสชันเป็น root
yarek

0

supervisordก็เป็นตัวเลือกเช่นกัน คุณจะเขียนบางบรรทัดอีกครั้งเพื่อเริ่มต้นสิ่ง node.js และ PHP ของคุณ แต่จะน้อยลง


0

คุณสามารถใช้monitdสำหรับสิ่งนี้เพียงแค่เขียนคำจำกัดความ monit แล้วมันจะเริ่ม daemons ให้คุณ แต่ทำไมคุณไม่ใช้วิธีที่เหมาะสมกับสคริปต์ของ LSB มันไม่ยากที่จะเขียน (คุณกำลังเขียนเพียงครั้งเดียว) และมันเป็นวิธีที่สะอาดและมีค่ามากที่สุดในการทำสิ่งนี้

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