Script upstart che dipende dagli script init.d?


8

Ho uno script upstart per avviare un'app nodejs personalizzata. L'app dipende da couchdb ed elasticsearch. couchdb ed elasticsearch forniscono script init.d per avviarli / interromperli. È possibile dire al mio script upstart che couchdb ed elasticsearch sono dipendenze? Ho provato questo nel mio script upstart ma non sembra funzionare:

iniziare (ha iniziato couchdb e ha iniziato elasticsearch)

Grazie!



Ho provato questo: start on iniziato rc RUNLEVEL = [2345] ma non aiuta. Elasticsearch non è stato avviato all'avvio della mia app. Quindi sembra che non ci sia modo per il mio script upstart di sapere se i servizi avviati dagli script init sono già stati avviati?
Troia,

bene l'unica cosa che so che funzionerebbe è creare (o cercare e installare) script upstart sia per elasticsearch che per couchdb in modo da poter usare l'opzione "start on".
Rinzwind,

Vedi se questa risposta è utile! Ho trovato lo script upstart per entrambi: D Codice non testato, quindi potresti doverlo modificare per la tua situazione.
Rinzwind,

Risposte:


3

L'unica cosa che so che funzionerebbe è creare (o cercare e installare) script upstart sia per elasticsearch che per couchdb in modo da poter usare l'opzione "start on".

Upstart script per couchdb

# couchdb v1.2.0
#
# Installazione personalizzata di CouchDB

descrizione "CouchDB v1.2.0, locale"
uscita console

# inizia dopo che tutti i filesystem e le interfacce di rete sono disponibili
iniziare su (local-filesystems e net-device-up IFACE! = lo)
stop on runlevel [! 2345]

# imposta la directory di lavoro
env COUCHDB_WD = "/ path / to / build-couchdb / build / bin"
esporta COUCHDB_WD

# richiesto per erlang
env HOME = "/ home / user"
esporta HOME

copione
  # modifica PATH per colpire prima la directory di lavoro di couchdb locale
  PATH = "$ COUCHDB_WD: $ PATH"
  #export PATH # non necessario all'interno del blocco di script
  #logger -t $ 0 "HOME = '$ HOME'"
  #logger -t $ 0 "PATH = '$ PATH'"
  # output couchdb registra in una posizione personalizzata
  #exec >> / home / user / couchdb_local.log 2> & 1
  exec couchdb
fine script

Upstart per elasticsearch

# Servizio ElasticSearch

descrizione "ElasticSearch"

avviare (net-device-up
          e filesystem locali
          e runlevel [2345])

stop on runlevel [016]

limite di rigenerazione 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

uscita console

copione
  if [-f / etc / default / elasticsearch]; poi
    . / 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
fine script

Invece ho finito per creare uno script init.d. Grazie per l'aiuto però.
Troia,

Penso che tu abbia ragione ... Ho appena creato lo script init.d per ora come cerotto a causa di vincoli temporali.
Troia,

Funzionerà anche questo, ma è una regressione;) Dal 12.10 in poi, mi aspettavo che fosse l'opzione migliore. Ma se hai funzionato con lo script di init,
cercalo

7

Avevo la stessa domanda e ho anche trovato una risposta diversa . L'autore elenca 4 opzioni per ottenere questo risultato, di cui mi piace di più la prima:

Utilizzare initclt emit myservice-startedper segnalare il completamento dell'avvio del servizio dipendente. Nella risposta collegata, si suggerisce di aggiungere questa riga alla fine dello init.dscript del servizio di dipendenza , ma preferisco un metodo diverso. Mi piace creare un nuovo inid.dscript chiamato myservice-startedche contiene solo una startsezione. Utilizzando lo stile di commento appropriato nell'intestazione del file, dichiaro che dipende $myservicedall'avvio. Nella startsezione, dico all'inizio di myserviceiniziare. Puoi installarlo con update-rc.d.

Mi piace questa soluzione perché non è invadente; se un aggiornamento modifica uno degli init.dscript esistenti , non influirà su questi script aggiuntivi. Ma ricorda che sono necessarie modifiche ai tuoi script upstart .

Potrebbe apparire così:

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

Il tuo script upstart in attesa di myservice può ascoltare l' myservice-startedevento:

start on myservice-started
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.