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.