Skrip pemula yang tergantung pada skrip init.d?

8

Saya memiliki skrip pemula untuk memulai aplikasi nodejs khusus. Aplikasi ini tergantung pada couchdb dan elasticsearch. couchdb dan elasticsearch menyediakan skrip init.d untuk memulai / menghentikannya. Apakah mungkin untuk memberi tahu skrip pemula saya bahwa couchdb dan elasticsearch adalah dependensi? Saya mencoba ini dalam skrip pemula saya tetapi tampaknya tidak berhasil:

mulai (mulai couchdb dan mulai elasticsearch)

Terima kasih!

Troy
sumber
Saya mencoba ini: mulai di mulai rc RUNLEVEL = [2345] tetapi tidak membantu. Elasticsearch tidak dimulai ketika aplikasi saya mulai. Jadi sepertinya tidak ada cara bagi skrip pemula saya untuk mengetahui apakah layanan yang dimulai oleh skrip init sudah dimulai?
Troy
Yah satu-satunya hal yang saya tahu yang akan berhasil adalah membuat (atau mencari dan menginstal) skrip pemula untuk elasticsearch dan couchdb sehingga Anda dapat menggunakan opsi "mulai".
Rinzwind
Lihat apakah jawaban ini bermanfaat! Saya menemukan skrip pemula untuk keduanya: D Kode yang belum diuji sehingga Anda mungkin perlu mengubahnya untuk situasi Anda.
Rinzwind

Jawaban:

3

Satu-satunya hal yang saya tahu akan berhasil adalah membuat (atau mencari dan menginstal) skrip pemula untuk elasticsearch dan couchdb sehingga Anda dapat menggunakan opsi "mulai".

Skrip pemula untuk couchdb

# couchdb v1.2.0
#
# Pemasangan kustom CouchDB

deskripsi "CouchDB v1.2.0, lokal"
output konsol

# mulai setelah semua filesystem & interfae jaringan tersedia
mulai (sistem file lokal dan IFACE bersih-perangkat-up! = lo)
berhenti di runlevel [! 2345]

# set direktori kerja
env COUCHDB_WD = "/ path / ke / build-couchdb / build / bin"
ekspor COUCHDB_WD

# diperlukan untuk erlang
env HOME = "/ home / pengguna"
ekspor HOME

naskah
  # ubah PATH untuk menekan direktori kerja couchdb lokal terlebih dahulu
  PATH = "$ COUCHDB_WD: $ PATH"
  #export PATH # tidak perlu di dalam blok skrip
  #logger -t $ 0 "HOME = '$ HOME'"
  #logger -t $ 0 "PATH = '$ PATH'"
  # couchdb log keluaran ke lokasi kustom
  #exec >> / home / user / couchdb_local.log 2> & 1
  exec couchdb
akhiri skrip

Mulai baru untuk elasticsearch

# Layanan ElasticSearch

deskripsi "Pencarian Elastis"

mulai dari (net-device-up)
          dan sistem file lokal
          dan runlevel [2345])

berhenti di runlevel [016]

batas 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

output konsol

naskah
  jika [-f / etc / default / elasticsearch]; kemudian
    . / 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
akhiri skrip
Rinzwind
sumber
Saya akhirnya hanya membuat skrip init.d sebagai gantinya. Terima kasih atas bantuan Anda.
Troy
Saya pikir Anda benar ... Saya baru saja membuat skrip init.d untuk saat ini sebagai bantuan band karena keterbatasan waktu.
Troy
Itu akan bekerja juga tetapi merupakan regresi;) Sejak 12,10 mendukung pemula, saya berharap pemula menjadi pilihan yang lebih baik. Tetapi jika Anda membuatnya bekerja dengan skrip init lakukan untuk itu;)
Rinzwind
7

Saya memiliki pertanyaan yang sama, dan saya juga menemukan jawaban yang berbeda . Penulis mencantumkan 4 opsi untuk mencapai ini, yang paling saya sukai adalah yang pertama:

Gunakan initclt emit myservice-starteduntuk memberi sinyal penyelesaian startup layanan dependen Anda. Dalam jawaban yang ditautkan, disarankan untuk menambahkan baris ini ke akhir init.dskrip layanan dependensi , tapi saya lebih suka metode yang berbeda. Saya suka membuat inid.dskrip baru bernama myservice-startedyang hanya berisi startbagian. Menggunakan gaya komentar yang sesuai di header file, saya menyatakan bahwa itu tergantung pada $myserviceuntuk memulai. Di startbagian ini, saya memberi tahu pemula tentang myservicememulai. Anda dapat menginstalnya dengan update-rc.d.

Saya suka solusi ini karena tidak mengganggu; jika pembaruan mengubah salah satu init.dskrip yang ada , itu tidak akan mempengaruhi skrip tambahan ini. Tapi ingat bahwa perubahan script kaya baru Anda yang diperlukan.

Mungkin terlihat seperti ini:

#!/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

Skrip pemula Anda yang menunggu layanan saya dapat mendengarkan myservice-startedacara:

start on myservice-started
derabbink
sumber