Tập lệnh khởi động phụ thuộc vào tập lệnh init.d?


8

Tôi có một kịch bản mới bắt đầu để bắt đầu một ứng dụng nodejs tùy chỉnh. Ứng dụng này phụ thuộc vào couchdb và elaticsearch. couchdb và elaticsearch cung cấp các tập lệnh init.d để bắt đầu / dừng chúng. Có thể nói với kịch bản mới nhất của tôi rằng couchdb và elaticsearch là phụ thuộc không? Tôi đã thử điều này trong kịch bản mới nhất của tôi nhưng nó dường như không hoạt động:

bắt đầu (bắt đầu couchdb và bắt đầu elaticsearch)

Cảm ơn!



Tôi đã thử điều này: bắt đầu khi bắt đầu RC RUNLEVEL = [2345] nhưng không được. Elaticsearch đã không bắt đầu khi ứng dụng của tôi bắt đầu. Vì vậy, có vẻ như không có cách nào để tập lệnh khởi động của tôi biết liệu các dịch vụ được khởi tạo bởi init script đã bắt đầu chưa?
Troy

Vâng, điều duy nhất tôi biết sẽ hoạt động là tạo (hoặc tìm kiếm và cài đặt) các tập lệnh khởi động cho cả elaticsearch và couchdb để bạn có thể sử dụng tùy chọn "bắt đầu".
Rinzwind

Xem nếu câu trả lời này là hữu ích! Tôi đã tìm thấy tập lệnh khởi động cho cả hai: D Mã chưa được kiểm tra để bạn có thể cần phải điều chỉnh nó cho tình huống của mình.
Rinzwind

Câu trả lời:


3

Điều duy nhất tôi biết sẽ hoạt động là tạo (hoặc tìm kiếm và cài đặt) các tập lệnh khởi động cho cả elaticsearch và couchdb để bạn có thể sử dụng tùy chọn "bắt đầu".

Kịch bản khởi đầu cho couchdb

# couchdb v1.2.0
#
# Cài đặt tùy chỉnh CouchDB

mô tả "CouchDB v1.2.0, cục bộ"
đầu ra giao diện điều khiển

# bắt đầu sau khi tất cả các hệ thống tập tin và mạng interfae có sẵn
bắt đầu (hệ thống tập tin cục bộ và thiết bị mạng IFACE! = lo)
dừng lại trên runlevel [! 2345]

# đặt thư mục làm việc
env COUCHDB_WD = "/ path / to / build-couchdb / build / bin"
xuất COUCHDB_WD

# cần thiết cho erlang
env HOME = "/ nhà / người dùng"
xuất khẩu TRANG CHỦ

kịch bản
  # sửa đổi PATH để truy cập thư mục làm việc của couchdb cục bộ trước
  PATH = "$ COUCHDB_WD: $ PATH"
  #export PATH # không cần thiết trong khối tập lệnh
  #logger -t $ 0 "HOME = '$ HOME'"
  #logger -t $ 0 "PATH = '$ PATH'"
  # xuất nhật ký couchdb đến vị trí tùy chỉnh
  #exec >> / nhà / người dùng / couchdb_local.log 2> & 1
  thực hiện couchdb
kịch bản kết thúc

Khởi đầu cho elaticsearch

# Dịch vụ Tìm kiếm Đàn hồi

mô tả "Tìm kiếm đàn hồi"

bắt đầu (thiết bị mạng
          và hệ thống tập tin cục bộ
          và runlevel [2345])

dừng lại trên runlevel [016]

giới hạn hồi sinh 10 5

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

đầu ra giao diện điều khiển

kịch bản
  if [-f / etc / default / elaticsearch]; sau đó
    . / etc / default / elaticsearch
  fi

  su -s / bin / dash -c "/ usr / bin / elSTERearch -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 "elaticsearch
kịch bản kết thúc

Tôi đã kết thúc việc tạo ra một tập lệnh init.d thay thế. Cám ơn sự giúp đở cuả bạn.
Troy

Tôi nghĩ bạn đã đúng ... Tôi mới tạo tập lệnh init.d bây giờ dưới dạng hỗ trợ ban nhạc do hạn chế về thời gian.
Troy

Điều đó cũng sẽ hoạt động nhưng là một hồi quy;) Kể từ ngày 12.10, tôi mong muốn sự khởi đầu sẽ là lựa chọn tốt hơn. Nhưng nếu bạn làm cho nó hoạt động với init script thì hãy dùng nó;)
Rinzwind

7

Tôi đã có cùng một câu hỏi, và tôi cũng tìm thấy một câu trả lời khác nhau . Tác giả liệt kê 4 tùy chọn để thực hiện điều này, trong đó tôi thích cái đầu tiên nhất:

Sử dụng initclt emit myservice-startedđể báo hiệu việc hoàn thành khởi động dịch vụ phụ thuộc của bạn. Trong câu trả lời được liên kết, nên thêm dòng này vào cuối init.dtập lệnh của dịch vụ phụ thuộc , nhưng tôi thích một phương thức khác. Tôi muốn tạo một inid.dtập lệnh mới có tên myservice-startedchỉ chứa một startphần. Sử dụng kiểu nhận xét thích hợp trong tiêu đề của tệp, tôi tuyên bố rằng nó phụ thuộc vào $myserviceviệc được bắt đầu. Trong startphần này, tôi kể về myservicesự khởi đầu về việc bắt đầu. Bạn có thể cài đặt nó với update-rc.d.

Tôi thích giải pháp này vì nó không xâm phạm; nếu một bản cập nhật thay đổi bất kỳ init.dtập lệnh hiện có nào , nó sẽ không ảnh hưởng đến các tập lệnh bổ sung này. Nhưng hãy nhớ rằng những thay đổi đối với các kịch bản mới nhất của bạn bắt buộc.

Nó có thể trông như thế này:

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

Kịch bản mới nhất của bạn đang chờ myservice có thể lắng nghe myservice-startedsự kiện này:

start on myservice-started
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.