Script de démarrage qui dépend des scripts init.d?

8

J'ai un script parvenu pour démarrer une application nodejs personnalisée. L'application dépend de couchdb et elasticsearch. couchdb et elasticsearch fournissent des scripts init.d pour les démarrer / les arrêter. Est-il possible de dire à mon script parvenu que couchdb et elasticsearch sont des dépendances? J'ai essayé cela dans mon script parvenu mais cela ne semble pas fonctionner:

start on (a commencé couchdb et a commencé elasticsearch)

Merci!

Troy
la source
J'ai essayé ceci: démarrer sur démarré rc RUNLEVEL = [2345] mais cela n'aide pas. Elasticsearch n'a pas été lancé au démarrage de mon application. Il semble donc qu'il n'y ait aucun moyen pour mon script upstart de savoir si les services démarrés par les scripts init ont déjà démarré?
Troy
eh bien la seule chose que je sais qui fonctionnerait est de créer (ou rechercher et installer) des scripts upstart pour elasticsearch et couchdb afin que vous puissiez utiliser l'option "start on".
Rinzwind
Voyez si cette réponse est utile! J'ai trouvé un script novice pour les deux: D Code non testé, vous devrez donc peut-être le modifier pour votre situation.
Rinzwind

Réponses:

3

La seule chose que je sais qui fonctionnerait est de créer (ou rechercher et installer) des scripts upstart pour elasticsearch et couchdb afin que vous puissiez utiliser l'option "start on".

Script upstart pour couchdb

# couchdb v1.2.0
#
# Installation personnalisée de CouchDB

description "CouchDB v1.2.0, local"
sortie console

# démarre une fois que tous les systèmes de fichiers et interfae réseau sont disponibles
démarrer (systèmes de fichiers locaux et IFACE net-device-up! = lo)
arrêter au niveau d'exécution [! 2345]

# définir le répertoire de travail
env COUCHDB_WD = "/ chemin / vers / build-couchdb / build / bin"
exporter COUCHDB_WD

# requis pour erlang
env HOME = "/ home / utilisateur"
exporter ACCUEIL

scénario
  # modifier PATH pour frapper d'abord le répertoire de travail de couchdb local
  PATH = "$ COUCHDB_WD: $ PATH"
  #export PATH # non nécessaire dans le bloc de script
  #logger -t $ 0 "HOME = '$ HOME'"
  #logger -t $ 0 "PATH = '$ PATH'"
  # sortie des journaux de couchdb vers un emplacement personnalisé
  #exec >> / home / user / couchdb_local.log 2> & 1
  exec couchdb
script de fin

Parvenu pour elasticsearch

# Service ElasticSearch

description "ElasticSearch"

démarrer (net-device-up
          et systèmes de fichiers locaux
          et niveau d'exécution [2345])

arrêt au niveau d'exécution [016]

limite de réapparition 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

sortie console

scénario
  if [-f / etc / default / elasticsearch]; puis
    . / 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
script de fin
Rinzwind
la source
J'ai fini par créer un script init.d à la place. Merci quand même pour vôtre aide.
Troy
Je pense que vous avez raison ... Je viens de créer le script init.d pour l'instant comme un pansement en raison de contraintes de temps.
Troy
Cela fonctionnera aussi mais c'est une régression;) Puisque 12.10 favorise le début, je m'attendais à ce que le début soit la meilleure option. Mais si vous l'avez fait fonctionner avec le script init, allez-y;)
Rinzwind
7

J'avais la même question et j'ai également trouvé une réponse différente . Les listes d'auteur 4 options pour ce faire , dont je comme le premier meilleur:

Utilisez initclt emit myservice-startedpour signaler la fin du démarrage de votre service dépendant. Dans la réponse liée, il est suggéré d'ajouter cette ligne à la fin du init.dscript du service de dépendance , mais je préfère une méthode différente. J'aime créer un nouveau inid.dscript nommé myservice-startedqui ne contient qu'une startsection. En utilisant le style de commentaire approprié dans l'en-tête du fichier, je déclare qu'il dépend du $myservicedémarrage. Dans la startsection, je raconte par-dessus le myservicedémarrage. Vous pouvez l'installer avec update-rc.d.

J'aime cette solution car elle n'est pas intrusive; si une mise à jour modifie l'un des init.dscripts existants , elle n'affectera pas ces scripts supplémentaires. Mais rappelez-vous que des modifications de vos scripts de démarrage sont nécessaires.

Cela pourrait ressembler à ceci:

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

Votre script upstart en attente de myservice peut écouter l' myservice-startedévénement:

start on myservice-started
derabbink
la source