web-dev-qa-db-ja.com

依存関係を考慮するためにUpstartスクリプトを構成するにはどうすればよいですか?

PostgreSQL、Atlassian JIRA、Stash、Confluence、Crowdを単一のUbuntu 12.04サーバーにインストールしました。これらは統合されており、アトラシアンのドキュメントに従って機能しています。

私が気づいたことの1つは、製品スイートが依存コンポーネントのダウンを許容しないことです。たとえば、Crowdが停止すると、ユーザーはログインできなくなります。メンテナンス上の理由でPostgreSQLが停止している場合、依存アプリケーションは回復できません。

毎晩、システムはメンテナンスウィンドウを通過し、その間にオペレーティングシステムとソフトウェアにパッチが適用される場合があります。外部DNSは、アプリケーションでエラーが発生した場合にメンテナンスページを適切に表示するように構成されています。

時々、PostgreSQLを停止し、パッチを適用してから起動する場合があります。依存関係を考慮するためにUpstartスクリプトを構成するにはどうすればよいですか? 「開始」を設定しましたが、効果はありません。

インストール中にWindowsサービスを記述し、それらの依存関係を構成することに抵抗はありません(WindowsインストーラーやPowerShellなど)。

テストケース:

  • すべてのサービスを停止しました。その後、Confluenceを起動し、失敗する(PostgreSQLとCrowdが停止するため)か、自動的にPostgreSQLとCrowdの起動を試みると予想しました。どちらも起こりませんでした。

  • すべてのサービスを開始しました。その後、Confluence、JIRA、およびStashが停止することを期待して、Crowdを停止しました。 Crowdを停止しただけで、他のすべてのサービスは実行を続けましたが、正しく機能しませんでした。

依存関係:

  • 群衆:PostgreSQL、ネットワーキング
  • Confluence:PostgreSQL、ネットワーキング、クラウド
  • JIRA:PostgreSQL、ネットワーキング、クラウド
  • スタッシュ:PostgreSQL、ネットワーキング、クラウド

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経由でインストールされ、起動時に自動的に起動します。

7
bloudraak

試してください:

  • 群衆

    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
    

リファレンス: http://upstart.ubuntu.com/cookbook/

  • 6.32.2開始は別のサービスに依存する
  • 6.33.2依存サービスの前に停止
9
user.dz

Postgresqlはネイティブのupstartジョブではないため、これは少し難しくなります。以下を行う必要があります。

  1. /etc/init.d/postgresqlの開始部分のENDにinitctl emit -n started JOB=postgresql行を追加します
  2. /etc/init.d/postgresqlの停止部分の最初にinitctl emit stopping JOB=postgresql行を追加します
  3. 群衆を変更:

    start on started postgresql
    stop on stopping postgresql
    

それであるはずです。手順1と2についてサポートが必要な場合は、お問い合わせください。

6
CameronNemo