Как настроить сценарии Upstart для учета зависимостей?

7

У меня установлена ​​PostgreSQL, Atlassian JIRA, Stash, Confluence и Crowd на одном сервере Ubuntu 12.04. Они интегрированы и работают на атласскую документацию.

Одна вещь, которую я заметил, это то, что продукт не переносит зависимые компоненты, которые не работают. Например, если Crowd остановлен, пользователи больше не могут войти в систему. Если PostgreSQL останавливается по причинам обслуживания, зависимые приложения могут никогда не восстановиться.

Каждую ночь система проходит через окно обслуживания, в течение которого может быть исправлена ​​операционная система и программное обеспечение. Внешний DNS настроен на изящное отображение страницы обслуживания, если с приложениями возникла ошибка.

Время от времени PostgreSQL может быть остановлен, исправлен и запущен. Как настроить сценарии Upstart для учета зависимостей? Я настроил «start on», но не имеет никакого эффекта.

Мне удобнее писать службы Windows и настраивать их зависимости во время установки (например, установщик Windows или PowerShell).

Тесты:

  • Я остановил все службы. Затем я начал Confluence, ожидая, что это либо сбой (поскольку PostgreSQL и Crowd прекращены), или автоматически пытаются запустить PostgreSQL и Crowd. ни получилось.

  • Я начал все службы. Затем я остановил Толпу, ожидая, что Слияние, JIRA и Stash будут остановлены. Он только остановил Толпу и все остальные службы продолжали работать, но не функционировали правильно.

Зависимости:

  • Толпа : PostgreSQL, Networking
  • Confluence : PostgreSQL, Networking, Crowd
  • JIRA : PostgreSQL, Networking, Crowd
  • Stash : PostgreSQL, Networking, Crowd

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

Шкатулка

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

Толпа

# 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 был установлен через APT и запускается автоматически во время запуска.     

задан bloudraak 12.04.2014 в 20:17
источник

2 ответа

8

Try:

  • Толпа

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

    start on started crowd
    stop on stopping crowd
    
  • Шкатулка

    start on started crowd
    stop on stopping crowd
    
  • JIRA

    start on started crowd
    stop on stopping crowd
    

Ссылка: Ссылка

  • 6.32.2 Начало зависит от другой службы
  • 6.33.2 Остановка до службы, зависящей от службы
ответ дан user.dz 19.04.2014 в 21:51
источник
5

Это будет немного сложно, потому что postgresql не является родной выскочкой. Вам необходимо сделать следующее:

  1. Добавьте строку initctl emit -n started JOB=postgresql в END стартовой части /etc/init.d/postgresql
  2. Добавьте строку initctl emit stopping JOB=postgresql в НАЧАЛО остановки части /etc/init.d/postgresql
  3. Измените толщину на:

    start on started postgresql
    stop on stopping postgresql
    

Это должно быть так. Если вам нужна помощь для шагов 1 и 2, просто спросите.

    
ответ дан CameronNemo 02.06.2014 в 04:41
источник

Ознакомьтесь с другими вопросами по меткам