Ubuntu 12.04のinitスクリプトからの起動ジョブに依存する方法


10

私はUbuntu 12.04 LTSを使用していますが、このシステムは主にupstartジョブを使用しています。残念ながら、私のシステムは手動でコンパイルされたdbmailサーバーにも依存しています。このサーバーには、initスクリプトのみがあり、upstartスクリプトはありません。

使用してupdate-rc.d dbmail defaults、私はすべてのランレベル用dbmailをインストールしたのですが、MySQLは起動する前にデーモンが再び死ぬので、残念ながらそれは、開始されます。また、S90などに移動してみましたが、スクリプトを実行してもMySQLは使用できません。

次のように、スクリプトのLSBヘッダーに依存関係を追加しようとしました。

#!/bin/sh
### BEGIN INIT INFO
# Provides:          dbmail
# Required-Start:    $local_fs $remote_fs $syslog $network mysql
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start dbmail services
# Description:       Run network services provided by dbmail such as
#                    imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO

残念ながら、MySQLが起動する前にスクリプトがまだ起動しているようです。私は仕事を始めるのではなく、古臭いinitスクリプトに慣れているので、ここで少し混乱しています。依存関係を追加するにはどうすればよいですか、またはinitスクリプトのmysql前にジョブを開始するにはどうすればよいdbmailですか?

起動時にジョブ+ initスクリプトの開始順序を確認/確認するにはどうすればよいですか?これのためのツールはありますか?

MySQLがすでに実行されているため、起動後にシェルから手動でスクリプトを起動しても問題なく動作します。


醜い回避策として機能したのは、initスクリプトの「start()」関数に「sleep 3」を追加することでした。しかし、よりクリーンな方法が必要です。これは競合状態を悪用しているだけなので、これを適切な方法で修正したいと思います。
マーティン

回答:


12

/etc/init.d/dbmail startから実行すると/etc/rc.local、すべてのupstartジョブ/その他のinitスクリプトの後に開始されると思います。

しかし、私はおそらくに新しいupstartジョブを追加することでこれを修正し/etc/init/dbmail.confます。通常、init.dスクリプトには、ステータスなどをチェックするための多くのコードがあり、upstartが処理します。それは次のように簡単かもしれません:

start on started mysql
exec /usr/local/bin/dbmail

または、おそらく次のように既存のinitスクリプトを使用できます。

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.