Script upstart que depende dos scripts init.d?

7

Eu tenho um script iniciante para iniciar um aplicativo nodejs personalizado. O aplicativo depende do couchdb e elasticsearch. couchdb e elasticsearch fornecem scripts init.d para iniciar / pará-los. É possível dizer ao meu script iniciante que couchdb e elasticsearch são dependências? Eu tentei isso no meu script iniciante, mas parece não funcionar:

inicie (iniciou o couchdb e iniciou o elasticsearch)

Obrigado!

    
por Troy 12.04.2013 / 13:08

2 respostas

3

A única coisa que sei que funcionaria é criar (ou procurar e instalar) scripts de inicialização para elasticsearch e couchdb para que você possa usar a opção "start on".

Upstart script for couchdb

# couchdb v1.2.0
#
# Custom installation of CouchDB

description     "CouchDB v1.2.0, local"
console output

# start after all filesystems & network interfae are available
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

# set working directory
env COUCHDB_WD="/path/to/build-couchdb/build/bin"
export COUCHDB_WD

# required for erlang
env HOME="/home/user"
export HOME

script
  # modify PATH to hit local couchdb's working directory first
  PATH="$COUCHDB_WD:$PATH"
  #export PATH # not necessary inside script block
  #logger -t $0 "HOME='$HOME'"
  #logger -t $0 "PATH='$PATH'"
  # output couchdb logs to custom location
  #exec >>/home/user/couchdb_local.log 2>&1
  exec couchdb
end script
  • edite o env para o que você precisa;
  • Fonte: link

Upstart for elasticsearch

# ElasticSearch Service

description     "ElasticSearch"

start on (net-device-up
          and local-filesystems
          and runlevel [2345])

stop on runlevel [016]

respawn limit 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

console output

script
  if [ -f /etc/default/elasticsearch ]; then
    . /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
end script
  • Fonte: link
  • Altere o dir de env para o que você precisa.
por Rinzwind 12.04.2013 / 22:22
6

Eu fiz a mesma pergunta e também encontrei uma resposta diferente . O autor lista 4 opções para fazer isso, das quais eu gosto da primeira melhor:

Use initclt emit myservice-started para sinalizar a conclusão da inicialização de seu serviço dependente. Na resposta vinculada, sugere-se adicionar essa linha ao final do script init.d do serviço de dependência, mas prefiro um método diferente. Eu gosto de criar um novo script inid.d chamado myservice-started que contém apenas uma seção start . Usando o estilo de comentário apropriado no cabeçalho do arquivo, declaro que depende de $myservice ser iniciado. Na seção start , eu digo ao upstart sobre o myservice sendo iniciado. Você pode instalá-lo com update-rc.d .

Eu gosto desta solução porque não é intrusiva; Se uma atualização alterar qualquer um dos scripts init.d existentes, isso não afetará esses scripts adicionais. Mas lembre-se de que as alterações nos seus scripts iniciantes são necessárias.

Pode parecer assim:

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

Seu script inicial esperando por myservice pode ouvir o evento myservice-started :

start on myservice-started
    
por derabbink 07.05.2014 / 17:53

Tags