回答:
いくつかのオプションがあります:
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
サービススクリプトへのリンクを再度追加すると、トラブルが発生することです。また、メインpidが起動してからしばらく時間が経過するまで、mysqlは実際には準備ができていない場合があります。データベースは、開始後(トランザクションログの再生など)でも「オンライン」になるまでに時間がかかるため、問題があります。
3)「停止したrcで開始」(つまり、すべてのSysVジョブが終了したと主張したときに開始)を実行し、mysqlが準備完了になるのを待って終了するupstartジョブ(「waiter」)を作成します。ジョブを「停止したウェイターで開始」してください。
4)mysqlをUpstartジョブに変換します(最適なオプション)。ここにupstart mysql設定の開始点があります:https : //github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu
os.system('/sbin/initctl emit consul-finished')
他のサービスを開始しますstart on consul-finished
initctl emit cloud-init-finished
フックアップするためにsysvサービスをsed-replace する必要がありました
すべての非スタートアップジョブが終了した後に、あなたのスタートアップジョブを開始することをお勧めします。
start on started rc
/etc/init/rc.conf
upstart内から非upstartジョブを開始するものです。
使い方はどうですか
pre-start exec /etc/init.d/mysql start
あなたのスタートアップの仕事の中で!