web-dev-qa-db-fra.com

Comment configurer mes scripts Upstart pour prendre en compte les dépendances?

J'ai installé PostgreSQL, Atlassian JIRA, Stash, Confluence et Crowd sur un seul serveur Ubuntu 12.04. Ils sont intégrés et fonctionnent conformément à la documentation Atlassian.

Une chose que j'ai remarquée, c'est que la suite de produits ne tolère pas la panne de composants dépendants. Par exemple, si Crowd est arrêté, les utilisateurs ne peuvent plus se connecter. Si PostgreSQL est arrêté pour des raisons de maintenance, les applications dépendantes risquent de ne jamais être récupérées.

Chaque nuit, le système passe par une fenêtre de maintenance au cours de laquelle le système d'exploitation et les logiciels peuvent être corrigés. Le DNS externe est configuré pour afficher gracieusement une page de maintenance en cas d'erreur dans les applications.

De temps en temps, PostgreSQL peut être arrêté, corrigé et ensuite démarré. Comment configurer mes scripts Upstart pour prendre en compte les dépendances? J'ai configuré le "démarrer le", mais cela n'a aucun effet.

Je suis à l'aise pour écrire des services Windows et configurer leurs dépendances lors de l'installation (par exemple, un programme d'installation Windows ou PowerShell).

Testcases:

  • J'ai arrêté tous les services. J'ai ensuite démarré Confluence en espérant qu'il échouerait (PostgreSQL et Crowd étant arrêtés) ou qu'il tenterait automatiquement de démarrer PostgreSQL et Crowd. Ni arrivé.

  • J'ai commencé tous les services. J'ai alors arrêté Crowd, m'attendant à ce que Confluence, JIRA et Stash soient arrêtés. Il a seulement arrêté Crowd et tous les autres services ont continué à fonctionner, mais n'ont pas fonctionné correctement.

Dépendances:

  • Foule: PostgreSQL, Mise en réseau
  • Confluence: PostgreSQL, Mise en réseau, Foule
  • JIRA: PostgreSQL, Mise en réseau, Foule
  • Stash: PostgreSQL, Mise en réseau, Foule

Confluence

# confluence

description "Atlassian Confluence"

start on (net-device-up and local-filesystems and postgresql and runlevel [2345] and crowd)
stop on runlevel [!2345]

respawn

kill timeout 30

env RUN_AS_USER=confluence
env BASEDIR=/usr/local/bin/confluence

script
    LOGFILE=/var/log/confluence/confluence.`date +%Y-%m-%d`.log
    exec su - $RUN_AS_USER -c "$BASEDIR/bin/catalina.sh run" >> $LOGFILE 2>&1
end script

JIRA

description "Atlassian JIRA"

start on (net-device-up and local-filesystems and postgresql and runlevel [2345] and crowd)
stop on runlevel [!2345]

respawn

kill timeout 30

env RUN_AS_USER=jira
env BASEDIR=/usr/local/bin/jira

script
    LOGFILE=/var/log/jira/jira.`date +%Y-%m-%d`.log
    exec su - $RUN_AS_USER -c "$BASEDIR/bin/catalina.sh run" >> $LOGFILE 2>&1
end script

Stash

description "Atlassian Stash"

start on (net-device-up and local-filesystems and postgresql and runlevel [2345] and crowd)
stop on runlevel [!2345]

respawn

kill timeout 30

env RUN_AS_USER=stash
env BASEDIR=/usr/local/bin/stash
env STASH_HOME="/var/local/lib/stash"

script
    LOGFILE=/var/log/stash/stash.`date +%Y-%m-%d`.log
    exec su - $RUN_AS_USER -c "$BASEDIR/bin/start-stash.sh -fg" >> $LOGFILE 2>&1
end script

foule

# crowd

description "Atlassian Crowd - Single Sign-On (SSO) and Identity Management"

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

respawn

kill timeout 30

env RUN_AS_USER=crowd
env BASEDIR=/usr/local/bin/crowd/Apache-Tomcat

script
    LOGFILE=/var/log/crowd/crowd.`date +%Y-%m-%d`.log
    exec su - $RUN_AS_USER -c "$BASEDIR/bin/catalina.sh run" >> $LOGFILE 2>&1
end script

PostgreSQL a été installé via APT et démarre automatiquement au démarrage.

7
bloudraak

Essayer:

  • Foule

    start on (net-device-up and started postgresql)
    stop on stopping postgresql
    
  • Confluence

    start on started crowd
    stop on stopping crowd
    
  • Stash

    start on started crowd
    stop on stopping crowd
    
  • JIRA

    start on started crowd
    stop on stopping crowd
    

Référence: http://upstart.ubuntu.com/cookbook/

  • 6.32.2 Le démarrage dépend d'un autre service
  • 6.33.2 Arrêt avant le service dépendant
9
user.dz

Cela va être un peu difficile, parce que postgresql n'est pas un job parvenu natif. Vous devez faire ce qui suit:

  1. Ajoutez la ligne initctl emit -n started JOB=postgresql à la fin de la partie de départ de /etc/init.d/postgresql
  2. Ajoutez la ligne initctl emit stopping JOB=postgresql au début de la partie stop de /etc/init.d/postgresql
  3. Changer la foule en:

    start on started postgresql
    stop on stopping postgresql
    

Cela devrait être ça. Si vous avez besoin d'aide pour les étapes 1 et 2, il suffit de demander.

6
CameronNemo