สคริปต์พุ่งพรวดที่ขึ้นอยู่กับสคริปต์ init.d?


8

ฉันมีสคริปต์พุ่งพรวดเพื่อเริ่มต้นแอป nodejs ที่กำหนดเอง แอพขึ้นอยู่กับ couchdb และ elasticsearch couchdb และ elasticsearch ให้สคริปต์ init.d สำหรับการเริ่ม / หยุดพวกเขา เป็นไปได้หรือไม่ที่จะบอกสคริปต์ upstart ของฉันว่า couchdb และ elasticsearch เป็นการพึ่งพา? ฉันลองสิ่งนี้ในสคริปต์พุ่งพรวด แต่ดูเหมือนจะไม่ทำงาน:

เริ่มต้น (เริ่ม couchdb และเริ่ม elasticsearch)

ขอบคุณ!



ฉันลองสิ่งนี้: เริ่มจากเริ่ม rc rc RUNLEVEL = [2345] แต่มันก็ไม่ช่วย Elasticsearch ไม่เริ่มทำงานเมื่อแอปของฉันเริ่มทำงาน ดังนั้นจึงไม่มีวิธีใดที่สคริปต์ upstart ของฉันจะทราบว่าบริการที่เริ่มโดยสคริปต์ init ได้เริ่มต้นไปแล้วหรือไม่
ทรอย

สิ่งเดียวที่ฉันรู้ว่าจะใช้ได้คือการสร้าง (หรือค้นหาและติดตั้ง) สคริปต์พุ่งพรวดสำหรับทั้ง elasticsearch และ couchdb เพื่อให้คุณสามารถใช้ตัวเลือก "เริ่มต้นที่"
Rinzwind

ดูว่าคำตอบนี้มีประโยชน์หรือไม่! ฉันพบสคริปต์ธรรมดาสำหรับทั้งคู่: D รหัสที่ยังไม่ทดลองดังนั้นคุณอาจต้องปรับแต่งให้เข้ากับสถานการณ์ของคุณ
Rinzwind

คำตอบ:


3

สิ่งเดียวที่ฉันรู้ว่าจะใช้ได้คือการสร้าง (หรือค้นหาและติดตั้ง) สคริปต์พุ่งพรวดสำหรับทั้ง elasticsearch และ couchdb เพื่อให้คุณสามารถใช้ตัวเลือก "เริ่มต้นที่"

สคริปต์พุ่งพรวดสำหรับ couchdb

# couchdb v1.2.0
#
# การติดตั้งแบบกำหนดเองของ CouchDB

คำอธิบาย "CouchDB v1.2.0, local"
เอาต์พุตคอนโซล

# เริ่มหลังจากระบบไฟล์และการเชื่อมต่อเครือข่ายทั้งหมดพร้อมใช้งาน
เริ่มต้น (ระบบโลคัลไฟล์และอุปกรณ์ IFACE! = lo)
หยุดที่ runlevel [! 2345]

# set ไดเรกทอรีการทำงาน
env COUCHDB_WD = "/ path / to / build-couchdb / build / bin"
ส่งออก COUCHDB_WD

# จำเป็นสำหรับ erlang
env HOME = "/ home / ผู้ใช้"
ส่งออก HOME

ต้นฉบับ
  # แก้ไข PATH เพื่อไปยังไดเรกทอรีการทำงานของ local couchdb ก่อน
  PATH = "$ COUCHDB_WD: $ PATH"
  #export PATH # ไม่จำเป็นในบล็อกสคริปต์
  #logger -t $ 0 "HOME = '$ HOME'"
  #logger -t $ 0 "PATH = '$ PATH'"
  # เอาต์พุต couchdb บันทึกไปยังตำแหน่งที่กำหนดเอง
  #exec >> / home / user / couchdb_local.log 2> & 1
  exec couchdb
สคริปต์สิ้นสุด

พุ่งพรวดสำหรับ elasticsearch

บริการ ElasticSearch #

คำอธิบาย "ElasticSearch"

เริ่มต้น (net-device-up)
          และระบบไฟล์ท้องถิ่น
          และ runlevel [2345])

หยุดที่ runlevel [016]

ขีด จำกัด respawn 10 5

env ES_HOME = / usr / share / elasticsearch / home
env ES_MIN_MEM = 256m
env ES_MAX_MEM = 2g
env DAEMON = "$ {ES_HOME} / bin / elasticsearch"
env DATA_DIR = / data / elasticsearch / data
env CONFIG_DIR = / etc / elasticsearch

เอาต์พุตคอนโซล

ต้นฉบับ
  ถ้า [-f / etc / default / elasticsearch]; แล้วก็
    . / etc / default / ElasticSearch
  Fi

  su -s / bin / dash -c "/ usr / bin / elasticsearch -f -Des.path.conf = $ CONFIG_DIR -Des.path.home = $ ES_HOME -Des.path.logs = $ LOG_DIR -Des.path data = $ DATA_DIR -Des.path.work = $ WORK_DIR "elasticsearch
สคริปต์สิ้นสุด

ฉันเพิ่งจะสร้างสคริปต์ init.d แทน ขอบคุณสำหรับความช่วยเหลือของคุณ
ทรอย

ฉันคิดว่าคุณถูกต้อง ... ฉันเพิ่งสร้างสคริปต์ init.d เพื่อเป็นตัวช่วยวงเนื่องจากข้อ จำกัด ด้านเวลา
ทรอย

ที่จะทำงานด้วย แต่เป็นการถดถอย;) ตั้งแต่ 12.10 โปรดปรานพุ่งพรวดฉันคาดหวังพุ่งพรวดเป็นตัวเลือกที่ดีกว่า แต่ถ้าคุณทำให้มันทำงานกับสคริปต์ init ลองทำดูสิ)
Rinzwind

7

ฉันมีคำถามเดียวกันและฉันก็พบคำตอบที่ต่างออกไป ผู้เขียนเขียนตัวเลือก 4 ตัวเลือกเพื่อทำสิ่งนี้ซึ่งฉันชอบสิ่งแรกที่ดีที่สุด:

ใช้initclt emit myservice-startedเพื่อส่งสัญญาณความสมบูรณ์ของการเริ่มต้นบริการที่ขึ้นอยู่กับคุณ ในคำตอบที่เชื่อมโยงจะแนะนำให้เพิ่มบรรทัดนี้ในตอนท้ายของinit.dสคริปต์ของบริการอ้างอิงแต่ฉันชอบวิธีอื่น ฉันต้องการสร้างinid.dสคริปต์ใหม่ชื่อmyservice-startedที่มีเฉพาะstartส่วน ใช้สไตล์การแสดงความคิดเห็นที่เหมาะสมในส่วนหัวของไฟล์ฉันประกาศว่ามันขึ้นอยู่กับ$myserviceว่าจะเริ่ม ในstartส่วนฉันบอกคนธรรมดาเกี่ยวกับmyserviceการเริ่มต้น update-rc.dคุณสามารถติดตั้งได้กับ

ฉันชอบวิธีนี้เพราะไม่ก้าวก่าย; หากการอัปเดตเปลี่ยนแปลงinit.dสคริปต์ใด ๆ ที่มีอยู่ก็จะไม่มีผลกับสคริปต์เพิ่มเติมเหล่านี้ แต่จำไว้ว่าการเปลี่ยนแปลงสคริปต์พุ่งพรวดของคุณจะต้อง

อาจมีลักษณะเช่นนี้:

#!/bin/sh -e

### BEGIN INIT INFO
# Provides:          myservice-started
# Required-Start:    $myservice
# Default-Start:     2 3 4 5
# Short-Description: send upstart signal after starting myservice
# Description:       myservice needs to run before some upstart services can run
### END INIT INFO

. /lib/lsb/init-functions

case "$1" in
    start)
        log_daemon_msg "Signaling myservice started..." "myservice-started"
        initctl emit myservice-started --no-wait
    ;;

    *)
        log_action_msg "Usage: /etc/init.d/myservice-started start"
        exit 1
    ;;
esac

exit 0

สคริปต์พุ่งพรวดของคุณรอ myservice สามารถฟังmyservice-startedเหตุการณ์:

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