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!



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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.