我在一台 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,网络
- 合流:PostgreSQL、网络、Crowd
- 吉拉:PostgreSQL、网络、Crowd
- 藏:PostgreSQL、网络、Crowd
合流
# 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
吉拉
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 安装的,并在启动时自动启动。
答案1
尝试:
人群
start on (net-device-up and started postgresql) stop on stopping postgresql
合流
start on started crowd stop on stopping crowd
藏
start on started crowd stop on stopping crowd
吉拉
start on started crowd stop on stopping crowd
参考:http://upstart.ubuntu.com/cookbook/
- 6.32.2 启动依赖于另一个服务
- 6.33.2 在依赖的服务前停止
答案2
这会有点困难,因为 postgresql 不是原生 upstart 作业。您需要执行以下操作:
initctl emit -n started JOB=postgresql
在 /etc/init.d/postgresql 开始部分的末尾添加以下行- 将此行添加
initctl emit stopping JOB=postgresql
到 /etc/init.d/postgresql 停止部分的开头 将人群更改为:
start on started postgresql stop on stopping postgresql
就是这样。如果您需要步骤 1 和 2 的帮助,请直接询问。