如何配置我的 Upstart 脚本以考虑依赖项?

blo*_*aak 7 server upstart 12.04

我已经在单个 Ubuntu 12.04 服务器上安装了 PostgreSQL、Atlassian JIRA、Stash、Confluence 和 Crowd。它们按照 Atlassian 文档进行集成和工作。

我注意到的一件事是产品套件不能容忍依赖组件关闭。例如,如果 Crowd 停止,用户将无法再登录。如果 PostgreSQL 因维护原因被停止,则依赖的应用程序可能永远无法恢复。

每天晚上,系统都会经过一个维护窗口,在此期间可能会对操作系统和软件进行修补。外部 DNS 配置为在应用程序出现错误时正常显示维护页面。

有时,PostgreSQL 可能会被停止、打补丁然后启动。如何配置我的 Upstart 脚本以考虑依赖项?我配置了“开始”,但没有效果。

我很乐意在安装过程中编写 Windows 服务并配置它们的依赖项(例如 Windows 安装程序或 PowerShell)。

测试用例:

  • 我停止了所有服务。然后我启动了 Confluence,预计它要么失败(因为 PostgreSQL 和 Crowd 已停止),要么会自动尝试启动 PostgreSQL 和 Crowd。都没有发生。

  • 我启动了所有服务。然后我停止了 Crowd,期望 Confluence、JIRA 和 Stash 会被停止。它只是停止了 Crowd 并且所有其他服务继续运行,但未能正常运行。

依赖项:

  • 人群:PostgreSQL,网络
  • Confluence : PostgreSQL、网络、人群
  • JIRA:PostgreSQL、网络、人群
  • Stash:PostgreSQL、网络、人群

合流

# 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
Run Code Online (Sandbox Code Playgroud)

吉拉

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

人群

# 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
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 通过 APT 安装并在启动期间自动启动。

use*_*.dz 9

尝试:

参考:http : //upstart.ubuntu.com/cookbook/

  • 6.32.2 启动依赖另一个服务
  • 6.33.2 依赖服务前停止


Cam*_*emo 6

这会有点困难,因为 postgresql 不是原生的新贵工作。您需要执行以下操作:

  1. initctl emit -n started JOB=postgresql在 /etc/init.d/postgresql 的开始部分的 END添加行
  2. initctl emit stopping JOB=postgresql将这一行添加到 /etc/init.d/postgresql 的停止部分的 BEGINNING
  3. 将人群更改为:

    start on started postgresql
    stop on stopping postgresql
    
    Run Code Online (Sandbox Code Playgroud)

应该是这样。如果您需要第 1 步和第 2 步的帮助,请直接询问。