web-dev-qa-db-ja.com

sysvinit / upstartinitスクリプトをrunitに変換します

docker-baseimage を使用して、現在VMベースのインフラストラクチャをDockerベースのインフラストラクチャに移行しようとしています。これは、runit/runsvを使用してシステムサービスを開始および監視します。自作のPythonプログラムをサービスとしてインストールするのは明らかにvery簡単ですが、私は苦労しています/etc/init.d/*スクリプトをrunitサービスに変換します。

時にはそれはかなり簡単で、リストも http://smarden.org/runit/runscripts.html にありますが、それらのスクリプトのいくつかはUbuntu(の最新バージョン)では動作しませんパスと、プロセスをchrootに埋め込む必要があるのか​​、それとも別のユーザーとして実行する必要があるのか​​疑問に思っています。

それで、Ubuntuにあるinitスクリプトを単純なrunit-runnableスクリプトに変換する安全で信頼できる方法はありますか?

5
tgpfeiffer

短い答え

現時点では、いいえ、runitに固有の自動化された方法はありません。

長い答え

これを解決するためのいくつかのアプローチがあります。

ビルド済みスクリプトの使用

1つ目は、事前に作成されたスクリプトのセットを用意することです。これらは他のプロジェクトから抽出できます。 Void Linuxはベースのinitとスーパーバイザーとしてrunitを使用しているので、興味深いかもしれません。Githubには runit-scripts というプロジェクトがあります。そして、私は自分のプロジェクトのために恥知らずなプラグを作成します supervision-scripts プロジェクトはまだ開発中ですが、いくつかはプリベークされて準備ができています。

フレームワークの使用

2つ目は、スクリプト作成の移行を容易にするフレームワークを提供することです。 Ignite 可能性があります。また、Toki Cloverの Supervision Script Framework (私自身のプロジェクトと混同しないでください)もあなたが求めるものを提供するかもしれません。この場合、事前に作成された定義はありませんが、この移行を容易にするのに役立つシェルスクリプト(および場合によっては他のプログラム)の断片を入手できます。

既存のスクリプトとツールの借用

3つ目は、他のプロジェクトからスクリプトを借用することです。これは、外に出て本当に彼らを探していることを意味します。そこにいくつかありますが、あなたは本当に見なければなりません。

それを難し​​い方法で行う

そして最後に、あなたは時々それを自分で書かなければならないだけです。率直に言って、もしあなたが必死なら、元の/etc/init.d/(whatever)ファイルのコピーを作成し、それを脇に置いて、ファイルを編集してください。通常、init.dスクリプトの下部には、CASEステートメントとその仲間があり、そこから、あるべきではないが存在するはずの奇妙な組み込みコマンドラインスイッチがあるかどうかを確認できます。スーパーバイザーを使用する場合は適用されないため、この中のstart)およびstop)の内容以外は気にしないでください。周りを見回して、/ var/run /(whatever)ディレクトリを設定する必要があるかどうかを確認します。これも常に重要です(作成する場合は所有権を設定することを忘れないでください)。そして上に向かって、作者がそれを正しく行った場合、通常、realデーモン名とそのオプションを含む環境変数のセットがあります。そこから、通常、小さなスクリプトをすばやくまとめることができます。

2
Avery Payne