web-dev-qa-db-ja.com

Upstart:非起動プロセスの後にサービスを開始します

Ubuntu 10.04では、mysqlが稼働している場合にのみ、サービスをupstartで開始する必要があります。

問題は、mysql自体がupstartによって処理されないため、「開始」機能を使用できないことです。

私に何ができる ?

11
Falken

いくつかのオプションがあります。

1)mysqlがUpstartにイベントを発行して開始したことを通知する

initctl emit mysql-started "または同様のもの。

これは、initctl呼び出しを/etc/init.d/mysqlに追加することで処理できます。

2)通常のSysVランレベルからmysqlを無効にし、それを開始するラッパーUpstartジョブを作成します(これは停止を処理しません-単なる例):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

次に、「start on started mysql-sysv」という仕事をします。

ここでの問題は、誰か(またはシステムツールが自動的に)が/etc/rc?.dリンクを元の/etc/init.d/mysqlサービススクリプトに再度追加すると、問題が発生することです。また、mysqlは、メインpidが開始されてからしばらくafterするまで実際には準備ができていない場合があります。データベースは、開始後(トランザクションログの再生など)でも「オンライン」になるまでに時間がかかる場合があるため、問題があります。

3)「停止したrcで開始」(つまり、すべてのSysVジョブが完了したと主張したときに開始)するアップスタートジョブ(「ウェイター」)を作成し、mysqlの準備ができるまで待機してポーリングし、終了します。あなたの仕事を「停止したウェイターから始める」ようにしてください。

4)mysqlをUpstartジョブに変換します(最良のオプション)。ここにupstart mysql設定の開始点があります: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubunt

15
jamesodhunt

all非アップスタートジョブが終了した後で、アップスタートジョブを開始することをお勧めします。

start on started rc

/etc/init/rc.confは、upstart内から非upstartジョブを開始するものです。

小道具: https://serverfault.com/a/533481

0
Dave Gregory